Created
August 6, 2019 10:03
-
-
Save nest-don/818be847e2a0102060197b4576557eb9 to your computer and use it in GitHub Desktop.
This file contains 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 static class IdentityExtension | |
{ | |
public static void AddIdentity(this IServiceCollection services, IConfiguration configuration) | |
{ | |
services.Configure<IdentitySettings>(options => configuration.GetSection("IdentitySettings").Bind(options)); | |
IdentitySettings identitySettings = configuration.GetSection(nameof(IdentitySettings)).Get<IdentitySettings>(); | |
services.AddMvc(options => { | |
var policy = new AuthorizationPolicyBuilder() | |
.RequireAuthenticatedUser() | |
.Build(); | |
options.Filters.Add(new AuthorizeFilter(policy)); | |
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_2); | |
services.AddIdentity<Trader, IdentityRole<int>>(options => { | |
// Password settings. | |
options.Password.RequireDigit = identitySettings.PasswordRequireDigit; | |
options.Password.RequireLowercase = identitySettings.PasswordRequireLowercase; | |
options.Password.RequireNonAlphanumeric = identitySettings.PasswordRequireNonAlphanumic; | |
options.Password.RequireUppercase = identitySettings.PasswordRequireUppercase; | |
options.Password.RequiredLength = identitySettings.PasswordRequiredLength; | |
options.Password.RequiredUniqueChars = 1; | |
// Lockout settings. | |
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(30); | |
options.Lockout.MaxFailedAccessAttempts = 5; | |
options.Lockout.AllowedForNewUsers = true; | |
// User settings. | |
options.User.AllowedUserNameCharacters = | |
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+"; | |
options.User.RequireUniqueEmail = true; | |
// Set emailed token for both | |
options.Tokens.PasswordResetTokenProvider = TokenOptions.DefaultEmailProvider; | |
options.Tokens.EmailConfirmationTokenProvider = TokenOptions.DefaultEmailProvider; | |
}) | |
.AddEntityFrameworkStores<JwtauthContext>() | |
.AddDefaultTokenProviders(); | |
services.AddAuthorization(options => | |
{ | |
options.AddPolicy("AllTraders", builder => builder.RequireAuthenticatedUser().Build()); | |
options.AddPolicy("SkilledTraders", policy => | |
policy.Requirements.Add(new MinimumExperienceRequirement(1))); | |
options.AddPolicy("TraderManagers", policy => | |
policy.Requirements.Add(new MinimumExperienceRequirement(5))); | |
}); | |
services.AddSingleton<IAuthorizationHandler, ExperiencedTraderHandler>(); | |
services.Configure<SendGridSettings>(options => configuration.GetSection("SendGridSettings").Bind(options)); | |
services.AddTransient<IEmailSender, EmailSender>(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment