OnValidateIdentity отключает опцию MVC OWIN запомнить меня
Когда я активирую функцию выхода из сети OWIN с помощью штампов безопасности и использую OnValidateIdentity
-Отзыв CookieAuthenticationProvider
с SecurityStampValidator
-класс, пользователь выходит из системы каждый раз, когда закрывает браузер.
provider.OnValidateIdentity =
SecurityStampValidator.OnValidateIdentity<MyUserManager, MyUser>(
System.TimeSpan.FromSeconds(10),(manager, user) => {
return user.GenerateUserIdentityAsync(manager);
});
Тем не менее, когда я делаю сантехнику сам (поиск и сравнение штампов безопасности, отклонение или обновление личности) в OnValidateIdentity
Обратный звонок, кажется, все работает нормально.
Это известная ошибка, или я что-то здесь упускаю? Или есть хорошая документация о CookieAuthenticationProvider
и использование OnValidateIdentity
?
Копания с помощью Google показывает только несколько простых примеров, но не дает дальнейшего понимания.
Дополнительная информация
- Я использую собственную реализацию UserStorage, которая сохраняет все данные в базе данных
- Я отметил, что каждый запрос страницы вызывает два раза GetSecurityStampAsync UserStorage, тогда как при использовании моей реализации выполняется только один вызов.
- Установленная версия удостоверения 2.0.1
3 ответа
Это решено в ASP.NET Identity 2.2. См. https://aspnetidentity.codeplex.com/workitem/2319
Это в основном ошибка, регенерация куки должна соответствовать текущей опции "Помни меня" в куки. В качестве обходного пути вы можете скопировать OnValidateIdentity
код и фид в текущих свойствах контекста для прохождения постоянного режима через:
context.OwinContext.Authentication.SignIn(context.Properties, identity);
Я нашел следующий код в разборке SecurityStampValidator.OnValidateIdentity
:
// .. some other code
// ...
ClaimsIdentity claimsIdentity = await regenerateIdentityCallback(userManager, tUser);
if (claimsIdentity != null){
context.get_OwinContext().get_Authentication().SignIn(new ClaimsIdentity[]
{
claimsIdentity
});
}
Мне кажется, что SignIn
-операция не завершена и должна установить опцию "запомнить меня"? Поэтому я предполагаю, что реализация SecurityStampValidator содержит ошибки.