К сожалению,
FormsAuthentication.SetAuthCookie(identity.Name, isPersistent);
не хранит роли с идентичностью.Таким образом, когда личность воссоздается из cookie, у вас нет ролей.Для проверки попробуйте
this.User.IsInRole("Admin")
, и вы получите false
, хотя userManager
говорит об обратном.
Существует несколько обходных путей.
Вы можетенапример, переключитесь на любой другой персистентный идентификатор, например SessionAuthenticationModule
, который может сохранить ваше имя пользователя и роли в файле cookie.Вы можете следовать моему учебнику .
Другой подход заключается в том, чтобы иметь явный менеджер ролей и использовать его функцию, которая автоматически заставляет ваши роли храниться в другом файле cookie, отдельно от форм.cookie для аутентификации.Это включает в себя настройку поставщика ролей и написание собственного поставщика ролей, который будет адаптером для менеджера пользователей.
Наконец, вы можете забыть аутентификацию форм и использовать собственный способ Identity для выдачи файлов cookie, который будет включать вызов SignInAsync
в диспетчере аутентификации.