2014-10-09 92 views
1

我正在用ASP.NET Identity 2.0和EF 6.1.1构建一个MVC5应用程序。为什么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 2014-10-10 09:37:27

相关问题