2015-02-04 6 views
2

저는 Visual Studio 2015에 기본 사이트 템플릿을 사용하고 있습니다. 일부 역할을 추가하고 사용자에게 역할을 할당했습니다. 사용자가 로그인하면 역할은 0입니다. 역할을 수행하려면 무엇을해야합니까?MVC6 로그인 후 사용자 역할이 0입니까?

 [HttpPost] 
     [AllowAnonymous] 
     [ValidateAntiForgeryToken] 
     public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null) 
     { 
      if (ModelState.IsValid) 
      { 
       var signInStatus = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false); 

       switch (signInStatus) 
       { 
        case SignInStatus.Success: 

         var user = await GetCurrentUserAsync(); 


         return RedirectToLocal(returnUrl); 
        case SignInStatus.Failure: 
        default: 
         ModelState.AddModelError("", "Invalid username or password."); 
         return View(model); 
       } 
      } 

      // If we got this far, something failed, redisplay form 
      return View(model); 
     } 
+0

역할에 사용자를 추가하는 코드를 추가 할 수 있습니까? –

+0

여기에 설명 된 것과 동일한 문제라고 생각합니다. http://stackoverflow.com/q/28356740/1593334 – eadam

+0

역할에 사용자를 추가하는 코드를 추가하십시오. –

답변

1

코드를 보면 역할에 대한 체크가 누락 된 것처럼 보입니다.

이 비슷한 문제가 있었는데 코드를 파헤 쳐서 GetCurrentUserAsync()이 유효한 사용자 개체를 반환하지 않고 null 개체를 반환 한 것으로 나타났습니다. Context.User.GetUserId()이 문제이며 UserManager에 전달할 사용자 ID를 반환하지 않습니다. 이 이상적인 것은 아니지만

if (result.Succeeded) 
{ 
    var user = await UserManager.FindByEmailAsync(model.Email); 
    if (await UserManager.IsInRoleAsync(user, Roles.Admin)) 
    { 
     return RedirectToAction("Index", "Admin"); 
    } 

    return RedirectToLocal(returnUrl); 
} 

는 이것은 나를 위해 작동

0

... 작동합니까 잘못된 사용자 이름 또는 대한 올바른 리디렉션하지 않습니다이까지

내가이 다음을 사용하고 해결 나 아직 ... 확인합니다 암호 (4) ...

public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null) 
    { 
     ViewBag.ReturnUrl = returnUrl; 
     if (ModelState.IsValid) 
     { 
      var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false); 
      if (result.Succeeded) 
      { 
       return RedirectToLocal(returnUrl); 
      } 
      if (result.RequiresTwoFactor) 
      { 
       return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe }); 
      } 
      if (result.IsLockedOut) 
      { 
       return View("Lockout"); 
      } 
      else 
      { 
       ModelState.AddModelError("", "Invalid username or password."); 
       return View(model); 
      } 
     } 

     // If we got this far, something failed, redisplay form 
     return View(model); 
    } 

이 MVC 6 인 (VS 2015 RC) ... u는 여기에 모든 것을 찾을 수 있습니다 https://github.com/aspnet/Identity/tree/dev/samples/IdentitySample.Mvc

,
+0

O .. 예를 들어 귀하의 기본 인증을 true로 설정합니다. aplicationhost.config (IISExpress의 경우) FBA 용 –