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>();
  • 相关阅读:
    企业项目开发--分布式缓存memcached(3)
    何时及为什么整理代码:现在,以后,从不
    【译文】程序员的两种类型
    国际化SEO优化的最佳实践
    动态代理的基本理解与基本使用
    Filter过滤器-JavaWeb三大组件之一
    java通过jdbc插入中文到mysql显示异常(问号或者乱码)
    BeanUtils封装对象时一直提示ClassNotFoundException:org.apache.commons.beanutils.BeanUtils
    MVC开发模式与javaEE三层架构
    JSP、EL表达式、JSTL
  • 原文地址:https://www.cnblogs.com/jesen1315/p/11562013.html
Copyright © 2011-2022 走看看