Created
September 14, 2014 04:43
-
-
Save JonDouglas/61076025de2e64ed6eea to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class ApplicationUserManager : UserManager<ApplicationUser> | |
{ | |
public ApplicationUserManager(IUserStore<ApplicationUser> store) | |
: base(store) | |
{ | |
} | |
public static ApplicationUserManager Create( | |
IdentityFactoryOptions<ApplicationUserManager> options, | |
IOwinContext context) | |
{ | |
var manager = new ApplicationUserManager( | |
new UserStore<ApplicationUser>( | |
context.Get<ApplicationDbContext>())); | |
// Configure validation logic for usernames | |
manager.UserValidator = | |
new UserValidator<ApplicationUser>(manager) | |
{ | |
AllowOnlyAlphanumericUserNames = false, | |
RequireUniqueEmail = true | |
}; | |
// Configure validation logic for passwords | |
manager.PasswordValidator = new PasswordValidator | |
{ | |
RequiredLength = 6, | |
RequireNonLetterOrDigit = true, | |
RequireDigit = true, | |
RequireLowercase = true, | |
RequireUppercase = true, | |
}; | |
// Configure user lockout defaults | |
manager.UserLockoutEnabledByDefault = true; | |
manager.DefaultAccountLockoutTimeSpan = TimeSpan.FromMinutes(5); | |
manager.MaxFailedAccessAttemptsBeforeLockout = 5; | |
// Register two factor authentication providers. This application uses | |
// Phone and Emails as a step of receiving a code for verifying | |
// the user You can write your own provider and plug in here. | |
manager.RegisterTwoFactorProvider("PhoneCode", | |
new PhoneNumberTokenProvider<ApplicationUser> | |
{ | |
MessageFormat = "Your security code is: {0}" | |
}); | |
manager.RegisterTwoFactorProvider("EmailCode", | |
new EmailTokenProvider<ApplicationUser> | |
{ | |
Subject = "SecurityCode", | |
BodyFormat = "Your security code is {0}" | |
}); | |
manager.EmailService = new EmailService(); | |
manager.SmsService = new SmsService(); | |
var dataProtectionProvider = options.DataProtectionProvider; | |
if (dataProtectionProvider != null) | |
{ | |
manager.UserTokenProvider = | |
new DataProtectorTokenProvider<ApplicationUser>( | |
dataProtectionProvider.Create("ASP.NET Identity")); | |
} | |
return manager; | |
} | |
public virtual async Task<IdentityResult> AddUserToRolesAsync( | |
string userId, IList<string> roles) | |
{ | |
var userRoleStore = (IUserRoleStore<ApplicationUser, string>)Store; | |
var user = await FindByIdAsync(userId).ConfigureAwait(false); | |
if (user == null) | |
{ | |
throw new InvalidOperationException("Invalid user Id"); | |
} | |
var userRoles = await userRoleStore | |
.GetRolesAsync(user) | |
.ConfigureAwait(false); | |
// Add user to each role using UserRoleStore | |
foreach (var role in roles.Where(role => !userRoles.Contains(role))) | |
{ | |
await userRoleStore.AddToRoleAsync(user, role).ConfigureAwait(false); | |
} | |
// Call update once when all roles are added | |
return await UpdateAsync(user).ConfigureAwait(false); | |
} | |
public virtual async Task<IdentityResult> RemoveUserFromRolesAsync( | |
string userId, IList<string> roles) | |
{ | |
var userRoleStore = (IUserRoleStore<ApplicationUser, string>) Store; | |
var user = await FindByIdAsync(userId).ConfigureAwait(false); | |
if (user == null) | |
{ | |
throw new InvalidOperationException("Invalid user Id"); | |
} | |
var userRoles = await userRoleStore | |
.GetRolesAsync(user) | |
.ConfigureAwait(false); | |
// Remove user to each role using UserRoleStore | |
foreach (var role in roles.Where(userRoles.Contains)) | |
{ | |
await userRoleStore | |
.RemoveFromRoleAsync(user, role) | |
.ConfigureAwait(false); | |
} | |
// Call update once when all roles are removed | |
return await UpdateAsync(user).ConfigureAwait(false); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment