2016-07-11 26 views
2

新しいMicrosoft Identity Frameworkに関するドキュメントは少しばかり見えます。私は現在、標準のプロジェクトテンプレートを変更しています。二要素認証でユーザーにサインインしようとすると、何か不思議な行為に遭遇しました。SignInManager.SendTwoFactorCodeAsyncがfalseを返す原因は何ですか?

私たちはSMSを介して2FAのみを許可しているので、ユーザーがコードをどのようにしたいかを選択するオプションをバイパスしました。 2FAを持つユーザーと検証電話番号がログインしようとしたときに代わりに、彼らはこのコードをトリガー:

var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: true); 
switch (result) 
{ 
    case SignInStatus.RequiresVerification: 
     if (!await SignInManager.SendTwoFactorCodeAsync("Phone Code")) 
     { 
      TempData["ErrorMessage"] = "We could not verify your account. Please try again."; 
      return RedirectToAction("Error", "Error"); 
     } 
     return RedirectToAction("VerifyCode", new { Provider = "Phone Code", ReturnUrl = returnUrl, RememberMe = model.RememberMe }); 
    // other cases 
} 

ほとんどの時間、これは正常に動作します。しかし、ユーザーがログオフした後、最初にログオンし直すと、SendTwoFactorCodeAsyncはfalseを返し、エラーページに移動します。

SendTwoFactorCodeAsyncは、初めてログアウトしたユーザーが呼び出されたときに一貫して失敗するシナリオはありますか?

答えて

1

OwinのOはOpenを表しています。 GetVerifiedUserIdAsync()への呼び出しは、アプリケーションからSignInManager.GetVerifiedUserIdAsync()を呼び出すのと同じであるので、

public virtual async Task<bool> SendTwoFactorCodeAsync(string provider) 
{ 
    var userId = await GetVerifiedUserIdAsync().WithCurrentCulture(); 
    if (userId == null) 
    { 
     return false; 
    } 

    var token = await UserManager.GenerateTwoFactorTokenAsync(userId, provider).WithCurrentCulture(); 
    // See IdentityConfig.cs to plug in Email/SMS services to actually send the code 
    await UserManager.NotifyTwoFactorTokenAsync(userId, provider, token).WithCurrentCulture(); 
    return true; 
} 

これはSignInManagerからです:ソースコードは、この質問に答えるために利用可能です。

+0

ソリューションの内容を詳しく説明できますか。私はあなたの質問と同じ振る舞いをしていますが、答えは本当に解決策を明らかにしていません。 –

+0

@DustinLaineこれは機能コードです。したがって、userIdがnullの場合にのみfalseを返します。つまり、何らかの理由でユーザーが認識されていないということです。 –

+0

ありがとう、はい私はちょうどなぜか分からない。最初にログインしてからログアウトし、もう一度ログインしてください。そのメソッドは真であり、 'GetVerifiedUserIdAsync'を引き出すと、私はguidとnullを取得します。あなたの質問に奇妙に似ているようです。 –

関連する問題