2016-04-28 258 views
0

我想问一下,为什么用户ID为空(在下面的代码)用户在登录后。为什么用户为空

OR

我需要重定向取决于他们角色的用户。我需要尽可能简单。请求进行身份验证后,根据解密的饼干

// POST: /Account/Login 
    [HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) 
    { 
     if (!ModelState.IsValid) 
     { 
      return View(model); 
     } 

     // This doesn't count login failures towards account lockout 
     // To enable password failures to trigger account lockout, change to shouldLockout: true 
     var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false); 
     switch (result) 
     { 
      case SignInStatus.Success: 
       string UserId = User.Identity.GetUserId(); <------ HERE 
       HelpRoles hr = new HelpRoles(); 
       returnUrl = hr.CheckUserRoleAndRedirect(UserId); 
       return RedirectToLocal(returnUrl); 

回答

4

用户对象设置,而这些Cookie是没有确定,直到下一个请求,以便需要之前User.Identity不是null被刷新页面。

For more info,see this post

要解决此问题,在成功案例中,您可以使用电子邮件地址从数据库获取用户,并使用该ID作为替代。

1

就像John Mc说要解决这个问题,你必须在成功案例中获得用户。所以,你可能希望这样的事情越来越UserId

var user = userManager.Find(model.UserName, model.Password); 

var user = userManager.FindByEmail(model.Email); 

var user = userManager.FindByName(model.Username); 

编辑

在这种情况下,你就不必使用前你的方法如下所示 string UserId = User.Identity.GetUserId(); < ------这里

,因为一旦你的user object你可以得到id字段中它像user.Id