OK, hier ist mein Code einen Authentifizierungs-Cookie zu erstellen:Problem Erstellen von persistenter Authentifizierungscookie: ASP.NET MVC
// get user's role
List<UserType> roles = rc.rolesRepository.GetUserRoles(rc.userLoginRepository.GetUserID(userName));
List<string> rolesList = (from r in roles
select r.ToString()).ToList();
string[] rolesArr = rolesList.ToArray();
// create encryption cookie
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
1,
userName,
DateTime.Now,
DateTime.Now.AddDays(90),
createPersistentCookie,
String.Join(";",rolesArr) //user's roles
);
// add cookie to response stream
string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
System.Web.HttpCookie authCookie = new System.Web.HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
System.Web.HttpContext.Current.Response.Cookies.Add(authCookie);
//FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
Und hier ist mein Code in Global.asax die Benutzerrollen in die Benutzeridentität zu setzen:
Wenn jedoch createPersistentCookie im oberen Beispiel TRUE ist, wird kein persistenter Cookie erstellt. Wenn ich die letzte Zeile wie folgt auskommentiere:
//System.Web.HttpContext.Current.Response.Cookies.Add(authCookie);
FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
dann wird der dauerhafte Cookie auf meiner Festplatte erstellt. ABER dann im Global.asax-Code ist das UserData-Feld in "authTicket" leer, so dass ich die Rollen nicht richtig einrichten kann!
Also muss ich SetAuthCookie verwenden, um einen dauerhaften Cookie zu erstellen, aber aus irgendeinem Grund verschwindet das Feld UserData aus dem persistenten Cookie.
Was ist die Antwort darauf?
Ja, das tat es! Vielen Dank. Ich habe mir die Haare ausgerissen. Jetzt kann ich die Response.Cookies.Add anstelle von SetAuthCookie verwenden, und ein persistentes Cookie wird erstellt, UND die UserData wird nicht ausgeblendet (seltsam!) – Cynthia