我如何才能要求一封已确认的电子邮件或电话进行登录



我正在开发一个系统,该系统允许用户以电子邮件或电话号码作为用户名进行注册。我们希望在允许登录之前确认这是有效的。我们正在将ASP.NET核心标识与Identity Server 4一起使用。

我找到了需要确认电话和确认电子邮件的说明(https://learn.microsoft.com/en-us/aspnet/core/security/authentication/identity-configuration?view=aspnetcore-3.1#登录(,但我找不到如何将它们用作确认电子邮件或电话的OR选项。

有一个RequireConfirmedAccount属性,但这似乎只会检查电子邮件,如果只确认了电话号码,则会失败。

我有没有办法覆盖它,或者注入我自己的登录管理器来强制执行它?

发现我们可以提供自定义SignInManager并覆盖CanSignInAsync方法,基于源:

public class CustomSignInManager : SignInManager<ApplicationUser>
{
// ..default constructor
public override async Task<bool> CanSignInAsync(ApplicationUser user)
{
var emailConfirmed = await UserManager.IsEmailConfirmedAsync(user);
var phoneConfirmed = await UserManager.IsPhoneNumberConfirmedAsync(user);

return emailConfirmed || phoneConfirmed;
}
}

然后在startup.cs中,在Identity config:中添加一个自定义SignInManager

services.AddIdentity<ApplicationUser, IdentityRole>(options =>
{
...
})
.AddSignInManager<CustomSignInManager>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();

最新更新