在没有角色实现的情况下在asp core 2中实现标识是否可行? 我试图实现以下目标:
Is it feasible to implement identity in asp core 2 without roles implementation? I have tried to implement the following:
services.AddIdentityCore<TUser>();但是这似乎不起作用.
推荐答案我明白了!
我已经在github中上传了一个仓库: github/tolemac/IdentityWithoutRoles
I have upload a repo in github: github/tolemac/IdentityWithoutRoles
您必须使用正确的DbSets创建您的自定义ApplicationDbContext:
You have to create your custom ApplicationDbContext with corrects DbSets:
public class ApplicationDbContext : DbContext { public ApplicationDbContext(DbContextOptions options) : base(options) { } /// <summary> /// Gets or sets the <see cref="DbSet{TEntity}"/> of Users. /// </summary> public DbSet<ApplicationUser> WebUsers { get; set; } /// <summary> /// Gets or sets the <see cref="DbSet{TEntity}"/> of User claims. /// </summary> public DbSet<IdentityUserClaim<long>> UserClaims { get; set; } /// <summary> /// Gets or sets the <see cref="DbSet{TEntity}"/> of User logins. /// </summary> public DbSet<IdentityUserLogin<long>> UserLogins { get; set; } /// <summary> /// Gets or sets the <see cref="DbSet{TEntity}"/> of User tokens. /// </summary> public DbSet<IdentityUserToken<long>> UserTokens { get; set; } /// <summary> /// Configures the schema needed for the identity framework. /// </summary> /// <param name="builder"> /// The builder being used to construct the model for this context. /// </param> protected override void OnModelCreating(ModelBuilder builder) { base.OnModelCreating(builder); // add your model builder code here. } }然后,您必须以这种方式配置服务:
Then you have to configure the services this way:
services.AddDbContext<ApplicationDbContext>(options => options.UseInMemoryDatabase("WebApplicationTestingDatabase"));//.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); services.AddIdentityCore<ApplicationUser>(options => { // Identity options configuration options.Password.RequireDigit = true; options.Password.RequiredLength = 8; options.Password.RequireNonAlphanumeric = true; options.Password.RequireUppercase = true; options.Password.RequireLowercase = true; }) .AddUserStore<UserStore<ApplicationUser, IdentityRole<long>, ApplicationDbContext, long>>() .AddDefaultTokenProviders() .AddSignInManager<SignInManager<ApplicationUser>>(); services.AddAuthentication(options => { options.DefaultAuthenticateScheme = IdentityConstants.ApplicationScheme; options.DefaultChallengeScheme = IdentityConstants.ApplicationScheme; options.DefaultSignInScheme = IdentityConstants.ExternalScheme; }).AddCookie(IdentityConstants.ApplicationScheme, o => { o.LoginPath = new PathString("/Account/Login"); o.Events = new CookieAuthenticationEvents() { OnValidatePrincipal = SecurityStampValidator.ValidatePrincipalAsync }; }).AddCookie(IdentityConstants.ExternalScheme, o => { o.Cookie.Name = IdentityConstants.ExternalScheme; o.ExpireTimeSpan = TimeSpan.FromMinutes(5.0); }) .AddCookie(IdentityConstants.TwoFactorRememberMeScheme, o => o.Cookie.Name = IdentityConstants.TwoFactorRememberMeScheme) .AddCookie(IdentityConstants.TwoFactorUserIdScheme, o => { o.Cookie.Name = IdentityConstants.TwoFactorUserIdScheme; o.ExpireTimeSpan = TimeSpan.FromMinutes(5.0); } ); services.AddScoped<ISecurityStampValidator, SecurityStampValidator<ApplicationUser>>();您必须手动使用AddIdentityCore,AddUserStore和AddAuthentication,也必须配置ISecurityStampValidator.
You have to use AddIdentityCore, AddUserStore and AddAuthentication manually, have to configure ISecurityStampValidator too.
希望它会有用.
更多推荐
如何在没有角色的情况下使用ASP.NET Core Identity?
发布评论