Линия
UserManager.SetLockoutEnabled(user.Id, true);
не блокировки или разблокировки учетной записи. Этот метод используется для постоянного включения или отключения блокировки процесса для данной учетной записи пользователя. Как бы то ни было, вы делаете вызов, который в основном устанавливает эту учетную запись пользователя, чтобы быть связанной правилами блокировки аккаунта. Выполнение вызова с помощью второго параметра, как false
т.е.
UserManager.SetLockoutEnabled(user.Id, false);
позволит вам настроить учетную запись пользователя, которая освобождается от правил блокировки - это может быть полезно для учетной записи администратора.
Вот код для UserManager.IsLockedOutAsync
:
/// <summary>
/// Returns true if the user is locked out
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
public virtual async Task<bool> IsLockedOutAsync(TKey userId)
{
ThrowIfDisposed();
var store = GetUserLockoutStore();
var user = await FindByIdAsync(userId).WithCurrentCulture();
if (user == null)
{
throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound,
userId));
}
if (!await store.GetLockoutEnabledAsync(user).WithCurrentCulture())
{
return false;
}
var lockoutTime = await store.GetLockoutEndDateAsync(user).WithCurrentCulture();
return lockoutTime >= DateTimeOffset.UtcNow;
}
Как вы можете видеть, для пользователя классифицироваться как заблокированный, блокировка должна быть включена, как описано выше, и пользователь должен иметь значение LockoutEndDateUtc
, которое больше или равно текущей дате.
Таким образом, чтобы «навсегда» заблокировать учетную запись, вы можете сделать следующее:
using (var _db = new ApplicationDbContext())
{
UserStore<DALApplicationUser> UserStore = new UserStore<DALApplicationUser>(_db);
UserManager<DALApplicationUser> UserManager = new UserManager<DALApplicationUser>(UserStore);
UserManager.UserLockoutEnabledByDefault = true;
DALApplicationUser user = _userService.GetUserByProfileId(id);
bool a = UserManager.IsLockedOut(user.Id);
//user.LockoutEndDateUtc = DateTime.MaxValue; //.NET 4.5+
user.LockoutEndDateUtc = new DateTime(9999, 12, 30);
_db.SaveChanges();
a = UserManager.IsLockedOut(user.Id);
}