На моей странице входа FormsAuthenticationTicket
настроен как постоянный файл cookie с некоторыми пользовательскими данными. Теперь мне нужно изменить эти пользовательские данные, поэтому он содержит еще один параметр. Когда предыдущий пользователь посетит сайт в следующий раз, я десериализую эту пользовательскую учетную запись в Application_PostAuthenticateRequest
, но теперь я не буду добавлять вновь добавленный параметр.Renew FormsAuthenticationTicket UserData
Могу ли я получить этот параметр без необходимости повторного входа в систему?
А если нет, как сообщить постоянному файлу cookie, что он должен быть «обновлен»?
Cookie set. userId - новый параметр:
CustomPrincipalSerializeModel serializeModel = new CustomPrincipalSerializeModel();
serializeModel.FirstName = model.UserName;
serializeModel.userId = model.userId;
JavaScriptSerializer serializer = new JavaScriptSerializer();
string userData = serializer.Serialize(serializeModel);
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
1,
model.UserName,
DateTime.Now,
DateTime.Now.AddYears(5),
model.RememberMe,
userData);
string encTicket = FormsAuthentication.Encrypt(authTicket);
HttpCookie faCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
faCookie.Expires = authTicket.Expiration;
Response.Cookies.Add(faCookie);
return RedirectToAction("Index", "Home");
Поиск файлов cookie. Userid является новым параметра Я, и null
для предыдущего зарегистрированных пользователей:
HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie != null)
{
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
JavaScriptSerializer serializer = new JavaScriptSerializer();
CustomPrincipalSerializeModel serializeModel = serializer.Deserialize<CustomPrincipalSerializeModel>(authTicket.UserData);
CustomPrincipal newUser = new CustomPrincipal(authTicket.Name);
newUser.FirstName = serializeModel.FirstName;
newUser.userId = serializeModel.userId;
HttpContext.Current.User = newUser;
}
Это MVC. Он получает правильный пользовательский принцип, но поскольку он просто десериализует некоторые данные, сохраненные в файле cookie, новый добавленный тип не задается в сериализации ... Так что либо пользователь должен войти в систему еще раз, либо я хотел бы знать, как Обновить. – perene
Вы проверили, что новый UserId был правильно настроен и правильно сериализован в UserData, прежде чем шифровать его. –
... Пользователь UserId НЕ установлен - вот и вся проблема. Чтобы он был установлен, пользователю необходимо снова выйти и войти в систему и создать новый файл cookie, и я ищу способ не делать этого. – perene