先决条件:
- 一个使用ASP.NET Core Identity的ASP.NET Core项目,其中一个或多个外部登录提供程序已经配置并且可以正常工作,例如Google。
这就是我的工作方式。
- 使用Scaffold Identity过程覆盖“帐户/外部登录”页面。 (我也将该页面添加到了Wayback Machine。谢谢,Internet存档!)
- 打开ExternalLogin.cshtml.cs文件并找到
OnGetCallbackAsync
方法。
- 找到对
_signInManager.ExternalLoginSignInAsync()
的调用,并将bypassTwoFactor
参数从true更改为false。
-
找到条件语句,这些条件语句检查ExternalLoginSignInAsync()的结果,并添加以下代码:
if (result.RequiresTwoFactor)
{
return RedirectToPage("./LoginWith2fa",new { ReturnUrl = returnUrl,RememberMe = false });
}
将它们放在一起,您应该具有以下内容:
// Sign in the user with this external login provider if the user already has a login.
var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider,info.ProviderKey,isPersistent: false,bypassTwoFactor : false);
if (result.Succeeded)
{
_logger.LogInformation("{Name} logged in with {LoginProvider} provider.",info.Principal.Identity.Name,info.LoginProvider);
return LocalRedirect(returnUrl);
}
if (result.RequiresTwoFactor)
{
return RedirectToPage("./LoginWith2fa",RememberMe = false });
}
if (result.IsLockedOut)
{
return RedirectToPage("./Lockout");
}
else
{
// existing code omitted for brevity
}
注意:由于我找不到有关此操作的任何文档或示例,因此我接受我的实现可能不是最佳方法。如果您知道更好的方法,请分享!
本文链接:https://www.f2er.com/2956494.html