依存性注入によってSignInManagerとAuthenticationManagerを使用しています。すべてここでSendTwoFactorCodeAsync以外SendTwoFactorCodeAsyncは、依存関係を持つSignManagerを使用して、成功したログイン後に「ユーザーIDが見つかりません」を返します。
を細かい作業がコードです:
:UtilityConfig
container.RegisterType<ApplicationSignInManager>();
container.RegisterType<ApplicationUserManager>();
アカウント・コントローラ
var myUser = await UserManagerService.Value.FindAsync(model.Mobile, model.Password);
if (myUser != null)
{
var result = await SignInManager.Value.PasswordSignInAsync(model.Mobile, model.Password, false, shouldLockout: false);
switch (result)
{
case SignInStatus.Success:
{
//success code
}
case SignInStatus.RequiresVerification:
{
var code = await UserManagerService.Value.GenerateTwoFactorTokenAsync(myUser.Id, ConfigurationManager.AppSettings["PhoneCodeProvider"]);
var send = await SignInManager.Value.SendTwoFactorCodeAsync(ConfigurationManager.AppSettings["PhoneCodeProvider"]); //here throughing exception
if (send)
{
SmsHelper.Value.SendSmsBySmsBatch(user.UserName, Constant.Instance().ProductName, myUser.UserName, "Code is " + code, true);
return RedirectToAction("TwoFactorCode", new { Provider = ConfigurationManager.AppSettings["PhoneCodeProvider"], ReturnUrl = returnUrl, RememberMe = false });
}
}
break;
---------------
}
。また、これを試してみました
var userId = await SignInManager.Value.GetVerifiedUserIdAsync(); // this is returning 0
var user = await UserManagerService.Value.FindByIdAsync(userId);
if (user != null)
{
var code = await UserManagerService.Value.GenerateTwoFactorTokenAsync(myUser.Id, ConfigurationManager.AppSettings["PhoneCodeProvider"]);
var send = await SignInManager.Value.SendTwoFactorCodeAsync(ConfigurationManager.AppSettings["PhoneCodeProvider"]); //here throughing exception
if (send)
{
SmsHelper.Value.SendSmsBySmsBatch(user.UserName, Constant.Instance().ProductName, user.UserName, "Your security code is " + code, true);
return RedirectToAction("TwoFactorCode", new { Provider = ConfigurationManager.AppSettings["PhoneCodeProvider"], ReturnUrl = returnUrl, RememberMe = false });
}
}
奇妙なことが再び私がログアウトして...初めて取得問題は、第二それが動作しようとしてみてください。..最初の試みで、私はこの問題を取得し、第二に、それが正常に動作してみてください(完全にすべての結果を返す)ということです。私は正確に同じエラーを取得し、この
私はリダイレクトを試してみました..しかし、問題は.if URLをリフレッシュして(入力としてコードを取得するためにリダイレクトしたもの)..検証SMSを再送します...安全ではありません.. – NMathur
https:// github。 com/aspnet/Identity/issues/1413 – NMathur
はい、この方法では、パスワードによるログインのCookieを使用しているため、次のリクエストまでは機能しません。https://docs.microsoft.com/en-us/aspnet/アイデンティティ/概要/機能-API/2要素認証 - SMS-as-aspnet-identityを使用して、一般的にどのように使用されたのか –