为什么IsInRole总是返回false?

Ing*_*mar 1 ef-code-first asp.net-identity

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

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

    [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
Run Code Online (Sandbox Code Playgroud)

这个工作正常,直到我点击UserManager.IsInRole().这总是返回false.

在某处我读到IsInRole()如果相应的用户没有登录就会失败.但是因为我传递了SignInManager.PasswordSignInAsync(),我相信这应该没问题.

是的,我已经多次检查数据库并且非常小心;)我的测试用户和我的测试角色"OfficeUser"肯定是相互分配的.

有人有想法吗?

DSR*_*DSR 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
Run Code Online (Sandbox Code Playgroud)