zoukankan      html  css  js  c++  java
  • 扩展Asp.Net Core中的IdentityUser类

      虽然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>();
  • 相关阅读:
    ThinkPHP5远程代码执行高危漏洞(附:升级修复解决方法)
    PowerDesigner 表格导出为excel
    ubuntu 18.04 配置远程ssh/远程ftp/远程vnc登陆
    Linux apache的运行用户和用户组
    mac系统 安装pip,用python读写excel(xlrd、xlwt)安装
    nvm 设置 nodejs 默认版本
    js基础
    Node.js 8 中的 util.promisify的详解
    HTTP协议中POST、GET、HEAD、PUT等请求方法以及一些常见错误
    MQTT简介
  • 原文地址:https://www.cnblogs.com/jesen1315/p/11562013.html
Copyright © 2011-2022 走看看