Как я могу потребовать подтвержденный адрес электронной почты или телефон для входа?

#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();