2017-09-09 24 views
1

ログイン後にユーザーの電子メールの確認ステータスを確認してから、それらを適切に指示しようとしています。これら二つのスレッドに基づいて_userManager.GetUserAsync(User)がnullを返す

var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false); 
if (result.Succeeded) 
{ 
    ClaimsPrincipal currentUser = this.User; 
    var thisUser = await _userManager.GetUserAsync(currentUser); 
    if(thisUser.EmailConfirmed) 
    { 
     return View("~/Views/Task/Index.cshtml"); 
    } 
    else 
    { 
     return View("ConfirmEmail"); 
    } 
} 

そしてまた、この:

var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false); 
if (result.Succeeded) 
{ 
    var thisUser = await _userManager.GetUserAsync(HttpContext.User); 
    if(thisUser.EmailConfirmed) 
    { 
     return View("~/Views/Task/Index.cshtml"); 
    } 
    else 
    { 
     return View("ConfirmEmail"); 
    } 
} 

ASP.NET Core Identity - get current user

は、私はこれを試してみました3210

内部コントローラからのものですが、thisUserは常にnullです。

電子メールが確認され、適切に再配信されることをログオンで確認するにはどうすればよいですか?

答えて

1

あなたのアプローチには問題があります。MembershipIdentityについては、cookiesに基づいています。クッキーは、クライアントによって送信された場合にのみ読み取ることができます。

だから、これはあなたの流れである。前述したように

  1. セットクッキー
  2. 読むクッキー

これは間違っています。あなたの流れは、どちらかのはずBE:どこか

  • (現在のクライアントによって送信されました)を読んクッキー
  • OR

    1. セットクッキー
      1. セットクッキー
      2. リダイレクト
      3. 保存されている場所からデータを読み取るには、email既に持っています
    0

    私はモデルで電子メールを持っていましたので、データベースで直接調べました。

    var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false); 
    if (result.Succeeded) 
    { 
        _logger.LogInformation("User logged in."); 
    
        var user = _context.Users.Single(x => x.Email == model.Email); 
    
        if(user.EmailConfirmed) 
        { 
         return View("~/Views/Task/Index.cshtml"); 
        } 
        else 
        { 
         return View("ConfirmEmail"); 
        } 
    
    } 
    
    +0

    私の答えからあなたの解決策を得ることができたら、私の答えはあなた自身の投稿ではありません。 –

    +0

    私の2番目の解決策は、「あなたが既に持っている電子メールに基づいて保存されている場所からデータを読み出す」ことです。 –

    +0

    これは完全に真実ではありません。リダイレクトせずにクッキーを設定することができます(もちろん必要です)。これはまさにあなたがこの答えでやっていることです。これは私が第二の解決策を意味しているものです –

    関連する問題