Lockout a user account in ASP.NET Identity

Introduction


In order to lockout a user account in ASP.NET Identity, we use two user properties: the LockoutEnabled property and the LockoutEndDateUtc property.

LockoutEnabled


The LockoutEnabled property indicates that the lockout is enabled for a user. By setting this property to true it does not mean that the user is locked out, it only means that the user could be locked out.

LockoutEndDateUtc


The LockoutEndDateUtc property indicates when the lockout ends and be careful, any time in the past is considered not locked out.

Locking out a user


By using these two properties together, you can lockout a user for a specific amount of time.

// Locking out a user for 10 minutes 
user.LockoutEnabled = true;
user.LockoutEndDateUtc = DateTimeOffset.Now.AddMinutes(10);

In preceding code, we enable the lockout for the user by setting the LockoutEnabled property to true . After that, we add 10 minutes to the current datetime by using the AddMinutes method and we set the result value to the LockoutEndDateUtc property. This will result in locking the user out for 10 minutes.

We can also use the methods SetLockoutEnabled and SetLockoutEndDate to modify the values of these properties by passing the id of the user to lockout as a parameter. These methods are called by the UserManager and they return an IdentityResult object.

// Locking out a user for 10 minutes 
var result = UserManager.SetLockoutEnabled(userId, true);
var result = UserManager.SetLockoutEndDate(userId, DateTimeOffset.Now.AddMinutes(10));

In order to lockout a user definitely or at least until unlocking it again, set the LockoutEndDateUtc property to : DateTimeOffset.MaxValue.

user.LockoutEnabled = true;
user.LockoutEndDateUtc = DateTimeOffset.MaxValue; 
// OR
var result = UserManager.SetLockoutEnabled(userId, true);
var result = UserManager.SetLockoutEndDate(userId, DateTimeOffset.MaxValue);

Unlocking a user


In order to unlock a locked out user, you have to set the value of the LockoutEnabled property to false.

user.LockoutEnabled = false;
// OR
var result = UserManager.SetLockoutEnabled(userId, false);

Namespaces


In order to get the UserManager, and use the SetLockoutEnabled and the SetLockoutEndDate methods, you have to include the following namespaces :

using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;