#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. Я чувствую себя слепым. Спасибо, что указали путь, который был прямо у меня под носом.