为什么IsInRole总是返回false?

时间:2014-10-09 08:21:18

标签: ef-code-first asp.net-identity

我正在使用ASP.NET Identity 2.0和EF 6.1.1构建MVC5应用程序。

这是我当前登录方法的一部分:

    [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”肯定是相互分配的。

有人有想法吗?

1 个答案:

答案 0 :(得分: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