2016-04-28 2 views
0

ですなぜ私はユーザーIDは、ユーザーのログイン後(下記のコードで)nullである理由を、お願いしたいと思います。ユーザーがnull

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

ユーザーオブジェクトが復号化されたクッキーに基づいて設定され、ページがUser.IdentityがNULLでない前にリフレッシュする必要ように、これらのクッキーは、次の要求までに設定されていません。

詳細については、see this postをご覧ください。

この問題を回避するには、成功した場合に電子メールアドレスを使用してDBからユーザーを取得し、代わりにそのIDを使用します。

1

ジョン・マックがこれを回避すると言ったように、あなたは成功のケースでユーザーを獲得する必要があります。だから、この場合EDIT

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(); < ------ HERE

ので、あなたが得る一度user objectあなたはuser.Id

みたいにidフィールドを取得することができます
関連する問題