2016-04-28 256 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