2014-10-09 3 views
1

ASP.NET Identity 2.0 및 EF 6.1.1을 사용하여 MVC5 응용 프로그램을 구축하고 있습니다.IsInRole이 항상 false를 반환하는 이유는 무엇입니까?

이 내 현재 로그인 방법의 일부입니다 : 내가 UserManager.IsInRole을 명중 할 때까지

[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 

이 잘 작동(). 항상 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

관련 문제