我正在使用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”肯定是相互分配的。
有人有想法吗?
答案 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