Hallo,
ich habe ein kleines Problem mit dem einem Login in ASP.NET.
Und zwar möchte ich nicht den eingebauten Login Wizard des VS benutzen und habe mir ein eigenes Login geschrieben. Dies funktioniert auch alles super, jedoch habe ich ein Problem mit den Rollen. Ich möchte gerne Bereiche per <location> node in meiner web.config deklarativ festlegen. Jedoch bekomme ich die Rolle nicht dem eingeloggten User zugeordnet. Nachfolgend der Code für den Login.
Wenn ich nach dem Login in einer andere Seite zum Testen mit isUserInRole("xyz") eine Kontrollstruktur anlege,
so läuft diese immer in den else Zweig, obwohl die Rolle definitiv "Administrator" ist. Selbst wenn ich dem Array roles[] direkt die Rolle "Administrator" zuweise, funktioniert es nicht.
Woran könnte es liegen?
Danke für eure Hilfe
Philipp
ich habe ein kleines Problem mit dem einem Login in ASP.NET.
Und zwar möchte ich nicht den eingebauten Login Wizard des VS benutzen und habe mir ein eigenes Login geschrieben. Dies funktioniert auch alles super, jedoch habe ich ein Problem mit den Rollen. Ich möchte gerne Bereiche per <location> node in meiner web.config deklarativ festlegen. Jedoch bekomme ich die Rolle nicht dem eingeloggten User zugeordnet. Nachfolgend der Code für den Login.
Code:
protected void cmdLogin_ServerClick(object sender, EventArgs e)
{
if (ValidateUser(txtUserName.Value, txtUserPass.Value))
{
string[] roles = new string[1];
//Rolle des Users bestimmen
string role = getRole(txtUserName.Value.ToString());
//Rolle in Rollenarray speichern --> benötigt für Generic Principal
roles[0] = role;
//neues Authentitätsticket erzeugen;
//Rolle des Benutzers wird in authTicket.userdata gespeichert
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, txtUserName.Value, DateTime.Now,
DateTime.Now.AddMinutes(30), false, role);
//Cookie verschlüsseln
string cookiestr;
cookiestr = FormsAuthentication.Encrypt(authTicket);
HttpCookie ck;
ck = new HttpCookie(FormsAuthentication.FormsCookieName, cookiestr);
Response.Cookies.Add(ck);
FormsIdentity id = new FormsIdentity(authTicket);
//Rollen als Array
this.Context.User = new GenericPrincipal(id, roles);
string strRedirect;
strRedirect = Request["ReturnUrl"];
if (strRedirect == null)
strRedirect = "Default.aspx";
Response.Redirect(strRedirect, true);
}
else
Response.Redirect("Login.aspx", true);
}
Wenn ich nach dem Login in einer andere Seite zum Testen mit isUserInRole("xyz") eine Kontrollstruktur anlege,
Code:
IPrincipal p = HttpContext.Current.User;
if (p.IsInRole("Administrator"))
{
Label1.Text = "Admin";
}
else
Label1.Text = "Nicht Admin";
so läuft diese immer in den else Zweig, obwohl die Rolle definitiv "Administrator" ist. Selbst wenn ich dem Array roles[] direkt die Rolle "Administrator" zuweise, funktioniert es nicht.
Woran könnte es liegen?
Danke für eure Hilfe
Philipp