#asp.net #asp.net-identity
#asp.net #asp.net-identity
Вопрос:
Я работаю над системой, которая позволит пользователям регистрироваться с их электронной почтой или номером телефона в качестве имени пользователя. Мы хотим подтвердить, что это действительно, прежде чем разрешить вход. Мы используем ASP.NET Идентификация ядра с сервером идентификации 4.
Я нашел инструкции для запроса подтвержденного телефона и запроса подтвержденного адреса электронной почты (https://learn.microsoft.com/en-us/aspnet/core/security/authentication/identity-configuration?view=aspnetcore-3.1#sign-in) , но я не могу найти, как использовать их в качестве опции ИЛИ для подтвержденной электронной почты или телефона.
Существует RequireConfirmedAccount
свойство, но, похоже, оно проверяет только адрес электронной почты и завершается ошибкой, если подтвержден только номер телефона.
Есть ли способ переопределить это или внедрить свой собственный менеджер входа для обеспечения этого?
Ответ №1:
Обнаружено, что мы можем предоставить пользовательский 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
добавьте пользовательский SignInManager в конфигурацию идентификации:
services.AddIdentity<ApplicationUser, IdentityRole>(options =>
{
...
})
.AddSignInManager<CustomSignInManager>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();