Как получить информацию о значении параметра идентификации, установленном MaxFailedAccessAttempts

#c# #.net #asp.net-identity #.net-core-3.1

#c# #.net #asp.net-identity #.net-core-3.1

Вопрос:

Я использую популярную библиотеку Microsoft.AspNetCore.Identity , которую я настроил:

 var builder = services.AddIdentity<User, Role>(o =>
            {
                o.Lockout.AllowedForNewUsers = true;
                o.Lockout.MaxFailedAccessAttempts = 3;
            });
            builder = new IdentityBuilder(builder.UserType, typeof(Role), builder.Services);

            builder.AddEntityFrameworkStores<RepositoryContext>()
            .AddDefaultTokenProviders();
  

На данный момент MaxFailedAccessAttempts установлено значение 3 попытки, но в будущем оно может измениться для всего приложения. Как я могу получить это значение в действиях? Я хотел бы использовать значение в действии, чтобы подсчитать, сколько попыток осталось до блокировки учетной записи.

 int attemptsLeft = user.AccessFailedCount - UNKNOWN.MaxFailedAccessAttempts;
return Unauthorized($"Wrong password. {attemptsLeft} attempts left.");
  

Решение, которое я нашел, — это инициализация MaxFailedAccessAttempts и получение значения действия из appsettings.json , но я не хочу добавлять другое поле в конфигурацию.

Ответ №1:

Вы можете ввести UserManager и получить MaxFailedAccessAttempts из Options.Lockout.MaxFailedAccessAttempts

 private readonly UserManager<User> _userManager;
public UserController(UserManager<User> userManager)
{
    _userManager = userManager;
}
.
.
.
int maxFailedAccessAttempts = _userManager.Options.Lockout.MaxFailedAccessAttempts;
int attemptsLeft = maxFailedAccessAttempts - user.AccessFailedCount;
return Unauthorized($"Wrong password. {attemptsLeft} attempts left.");
  

Комментарии:

1. Я чувствую себя слепым. Спасибо, что указали путь, который был прямо у меня под носом.