В моем приложении я хотел бы добавить дополнительные условия для входа пользователей. Например, администратору разрешено "блокировать" учетную запись пользователя по какой-либо причине. Когда учетная запись заблокирована, пользователь не может войти в систему. Обратите внимание, что это отличается от "блокировки" из-за нескольких неудачных попыток входа в систему. Состояние блокировки может быть удалено администратором.
Я вижу, что шаблон по умолчанию создает ApplicationSignInManager, который имеет значение по умолчанию.
public class ApplicationSignInManager : SignInManager<User, string>
Действие "Вход" из контроллера "Account" вызывает
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
Итак, моя попытка переопределить эту функцию
public override async Task<SignInStatus> PasswordSignInAsync(string userName, string password, bool isPersistent, bool shouldLockout)
{
User user = this.UserManager.FindByName(userName);
if (null != user)
{
if (true == user.AccountLocked)
{
return (SignInStatus.LockedOut);
}
}
var result = await base.PasswordSignInAsync(userName, password, isPersistent, shouldLockout);
return (result);
}
Есть две проблемы с этим. Во-первых, это предполагает, что "userName" уникально для каждого пользователя. Хотя это можно было бы с уверенностью предположить.
Во-вторых, функция возвращает практически SignInStatus, который определяется идентификатором Asp.net. Я не могу изменить, чтобы вернуть что-либо еще, чтобы сообщить правильную причину, по которой логин может выйти из строя.
Может ли кто-нибудь предоставить хорошие решения?