2014-10-09 3 views
1

Я создаю приложение MVC5 с ASP.NET Identity 2.0 и EF 6.1.1.Почему IsInRole всегда возвращает false?

Это часть моего текущего метода Логин:

[HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) 
    { 
     if (!ModelState.IsValid) 
      return View(model); 

     var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: true); 
     switch (result) 
     { 
      case SignInStatus.Success: 
       { 
        var user = await UserManager.FindAsync(model.UserName, model.Password); 

        if (user == null) 
         break; 

        if (!UserManager.IsInRole(user.Id, "OfficeUser")) 
         break; // << I always hit this line - even if the user is an OfficeUser 

Это работает отлично, пока я не ударил UserManager.IsInRole(). Это всегда возвращает false.

Где-то я читал, что IsInRole() не будет выполнен, если соответствующий пользователь не подписан. Но поскольку я пропускаю SignInManager.PasswordSignInAsync(), я считаю, что все должно быть хорошо.

И да, я проверил базу данных много раз и очень тщательно;) Мой тестовый пользователь и моя тестовая роль «OfficeUser» определенно назначены друг другу.

Есть ли у кого-нибудь идеи?

ответ

7

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

case SignInStatus.Success: 
       { 
        var user = await UserManager.FindAsync(model.UserName, model.Password); 
        var roles = await UserManager.GetRolesAsync(user.Id) 

        if (user == null) 
         break; 

        if (roles.Contains("OfficeUser")) 
         break; // << I always hit this line - even if the user is an OfficeUser 
+1

ДА, это работает. Большое спасибо, DSR !! Вы просто спасли мой день (и выходные :)) – Ingmar

Смежные вопросы