在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
虽然Asp.Net Core.Identity提供了IdentityUser类,但是在有些情况下我们需要一些额外的用户信息,比如性别,年龄等,这时候就需要来扩展IdentityUser类以达到我们的需求。 namespace Microsoft.AspNetCore.Identity { // // 摘要: // Represents a user in the identity system // // 类型参数: // TKey: // The type used for the primary key for the user. public class IdentityUser<TKey> where TKey : IEquatable<TKey> { // // 摘要: // Initializes a new instance of Microsoft.AspNetCore.Identity.IdentityUser`1. public IdentityUser(); // // 摘要: // Initializes a new instance of Microsoft.AspNetCore.Identity.IdentityUser`1. // // 参数: // userName: // The user name. public IdentityUser(string userName); // // 摘要: // Gets or sets the date and time, in UTC, when any user lockout ends. // // 言论: // A value in the past means the user is not locked out. public virtual DateTimeOffset? LockoutEnd { get; set; } // // 摘要: // Gets or sets a flag indicating if two factor authentication is enabled for this // user. [PersonalData] public virtual bool TwoFactorEnabled { get; set; } // // 摘要: // Gets or sets a flag indicating if a user has confirmed their telephone address. [PersonalData] public virtual bool PhoneNumberConfirmed { get; set; } // // 摘要: // Gets or sets a telephone number for the user. [ProtectedPersonalData] public virtual string PhoneNumber { get; set; } // // 摘要: // A random value that must change whenever a user is persisted to the store public virtual string ConcurrencyStamp { get; set; } // // 摘要: // A random value that must change whenever a users credentials change (password // changed, login removed) public virtual string SecurityStamp { get; set; } // // 摘要: // Gets or sets a salted and hashed representation of the password for this user. public virtual string PasswordHash { get; set; } // // 摘要: // Gets or sets a flag indicating if a user has confirmed their email address. [PersonalData] public virtual bool EmailConfirmed { get; set; } // // 摘要: // Gets or sets the normalized email address for this user. public virtual string NormalizedEmail { get; set; } // // 摘要: // Gets or sets the email address for this user. [ProtectedPersonalData] public virtual string Email { get; set; } // // 摘要: // Gets or sets the normalized user name for this user. public virtual string NormalizedUserName { get; set; } // // 摘要: // Gets or sets the user name for this user. [ProtectedPersonalData] public virtual string UserName { get; set; } // // 摘要: // Gets or sets the primary key for this user. [PersonalData] public virtual TKey Id { get; set; } // // 摘要: // Gets or sets a flag indicating if the user could be locked out. public virtual bool LockoutEnabled { get; set; } // // 摘要: // Gets or sets the number of failed login attempts for the current user. public virtual int AccessFailedCount { get; set; } // // 摘要: // Returns the username for this user. public override string ToString(); } } 接下来我们就来定义一个继承自IdentityUser类的ApplicationUser类。 public class ApplicationUser : IdentityUser { public string City { get; set; } } 然后在AppDbContext中继承泛型 IdentityDbContext<ApplicationUser>类。并且在Startup中注入的时候把IdentityUser修改为ApplicationUser后,再做数据库迁移,如果之前已经迁移过,则需要替换项目中所有的IdentityUser为ApplicationUser。 public class AppDbContext:IdentityDbContext<ApplicationUser> { public AppDbContext(DbContextOptions<AppDbContext> options):base(options) { } public DbSet<Student> Students { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Seed(); } } services.AddIdentity<ApplicationUser, IdentityRole>() .AddErrorDescriber<CustomIdentityErrorDescriber>() .AddEntityFrameworkStores<AppDbContext>();
|
请发表评论