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>();
  • 相关阅读:
    第十章 Ingress
    第九章 Service
    第八章 资源控制器
    第一章 Xshell5评估期已过问题
    第七章 yaml格式
    第六章 资源清单
    第五章 配置私有仓库Harbor
    第四章 K8s部署安装
    36 SpringBoot 在系统配置文件中动态加载配置
    Java 集合、数组 任意个数数字相加等于一个指定的数
  • 原文地址:https://www.cnblogs.com/jesen1315/p/11562013.html
Copyright © 2011-2022 走看看