Подтвердить что ты не робот

Как принудительно распространять изменения роли для пользователей с помощью ASP.NET Identity 2.0.1?

Я читал этот и в то время как он объясняет, как изменения роли в конечном итоге будут распространяться на файл cookie пользователя через некоторый промежуток времени, я до сих пор не понимаю, как я немедленное изменение роли пользователя.

Нужно ли мне подписывать пользователя, когда я изменяю его роли как администратора? Если так - как? Если я использую AuthenticationManager.SignOut();, то я подписываю себя (admin), а не пользователь, чьи роли я хочу изменить.

В настоящее время я использую await UserManager.UpdateSecurityStampAsync(user.Id); для создания новой марки безопасности, но она не работает. Когда я обновляю страницу в другом браузере при входе в систему как другой пользователь, его претензии (включая штамп безопасности) не изменяются.

4b9b3361

Ответ 1

Если вы хотите включить немедленное отмена куки файлов, то каждый запрос должен попасть в базу данных для проверки cookie. Таким образом, компромисс между задержкой заключается в загрузке базы данных. Но вы всегда можете установить validationInterval равным 0.

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
    LoginPath = new PathString("/Account/Login"),
    Provider = new CookieAuthenticationProvider
    {
        // Enables the application to validate the security stamp when the user logs in.
        // This is a security feature which is used when you change a password or add an external login to your account.  
        OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
            validateInterval: TimeSpan.FromSeconds(0),
            regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
    }
});

Ответ 2

Проблема заключается в том, что веб-сервер кэшировал эти данные. В конце концов, кеш обновится из базы данных, но не сразу. Вот почему есть задержка.

Очевидная вещь, я думаю, состоит в том, чтобы утилизировать пул приложений. Существующие запросы будут продолжены по прежнему процессу, который завершится, когда все будет завершено. Теперь запросы перейдут на новый процесс, который не будет кэшировать данные, и поэтому сначала прочитает новые данные из базы данных.