zoukankan      html  css  js  c++  java
  • Owin+ASP.NET Identity浅析系列(二)扩展用户属性

    在今天,读书有时是件“麻烦”事。它需要你付出时间,付出精力,还要付出一份心境。--仅以《Owin+ASP.NET Identity浅析系列》来祭奠那逝去的……

      上一篇博客讲了用户登录注册问题,这篇说下如何扩展用户属性,毕竟我们的项目中用户不可能只有用户名、邮箱、手机号不是,下面为我们的用户表新增两个属性:所在城市和年龄

    第一步:修改数据库表,新增两个字段

    create table aspnetusers
    (
    	Id char(32) primary key,
    	Email varchar(50) null comment '用户邮箱',
    	EmailConfirmed bit not null comment '是否认证邮箱',
    	PasswordHash varchar(100) null comment '账户密码',
    	SecurityStamp varchar(100) null comment '防伪印章',
    	PhoneNumber varchar(100) null comment '用户手机',
    	PhoneNumberConfirmed bit not null comment '是否认证手机',
    	TwoFactorEnabled bit not null comment '是否启用双重身份验证',
    	LockoutEndDateUtc datetime null comment '锁定结束时间',
    	LockoutEnabled bit not null comment '是否启用锁定',
    	AccessFailedCount int not null comment '登陆失败次数',
    	UserName varchar(50) not null comment '用户名称',
    	City varchar(50) null comment '所在城市',
    	Age int default 0 not null comment '今年几何'
    ) comment '用户表';
    

    第二步:在ApplicationUser类中加入对应的属性

    // 可以通过向 ApplicationUser 类添加更多属性来为用户添加配置文件数据。若要了解详细信息,请访问 http://go.microsoft.com/fwlink/?LinkID=317594。
    public class ApplicationUser : IdentityUser
    {
        public virtual string City { get; set; }
    
        public virtual int Age { get; set; }
    
        public ApplicationUser()
        {
            this.Id = System.Guid.NewGuid().ToString("N");
        }
    
        public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
        {
            // 请注意,authenticationType 必须与 CookieAuthenticationOptions.AuthenticationType 中定义的相应项匹配
            var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
            // 在此处添加自定义用户声明
            return userIdentity;
        }
    }
    

     第三步:修改用户注册代码(一套是默认的注册方式,一套是自定义注册方式)

      默认注册方式代码修改如下:

    var user = new ApplicationUser { UserName = model.UserName, Email = model.Email, City = model.City, Age = model.Age };
    
    var result = await UserManager.CreateAsync(user, model.Password);
    
    if (result.Succeeded)
    {
        return Json(new { Flag = true, Content = "注册成功!!!" }, JsonRequestBehavior.AllowGet);
    }
    else
    {
        return Json(new { Flag = false, Content = "注册失败!!!" }, JsonRequestBehavior.AllowGet);
    }
    

       自定义注册方式代码修改如下:

    var db = new Data.DataContext();
    
    db.Members.Add(new Data.DomainModels.Member()
    {
        Id = Guid.NewGuid().ToString("N"),
        SecurityStamp = Guid.NewGuid().ToString(),
        Email = model.Email,
        PasswordHash = UserManager.PasswordHasher.HashPassword(model.Password),
        UserName = model.UserName,
        City=model.City,
        Age=model.Age
    });
    
    var result = await db.SaveChangesAsync();
    
    if (result > 0)
    {
        return Json(new { Flag = true, Content = "注册成功!!!" }, JsonRequestBehavior.AllowGet);
    }
    else
    {
        return Json(new { Flag = false, Content = "注册失败!!!" }, JsonRequestBehavior.AllowGet);
    }
    

     Data.DomainModels.Member是映射数据库user表的实体类

        [Table("aspnetusers")]
        public class Member
        {
            public string Id { get; set; }
    
            public string Email { get; set; }
    
            public bool EmailConfirmed { get; set; }
    
            public string PasswordHash { get; set; }
    
            public string SecurityStamp { get; set; }
    
            public string PhoneNumber { get; set; }
    
            public bool PhoneNumberConfirmed { get; set; }
    
            public bool TwoFactorEnabled { get; set; }
    
            public DateTime? LockoutEndDateUtc { get; set; }
    
            public bool LockoutEnabled { get; set; }
    
            public int AccessFailedCount { get; set; }
    
            public string UserName { get; set; }
    
            public string City { get; set; }
    
            public int Age { get; set; }
        }
    
  • 相关阅读:
    redolog switch会发生完全检查点还是增量检查点?
    4G牌照发放生变 专家谏言电信联通如何选择
    [财富]iPhone如何征服日本?
    审计中移动现多处问题或致地方高层落马
    诺基亚CEO:Lumia不会像安卓推廉价版机型
    菜鸟学JDBC(二)
    简易网页采集器的实现
    手Q与微信:最终结局将会是手足相残!
    做网站Http状态码详解
    PHP $_SERVER['HTTP_REFERER'] 获取前一页面的 URL 地址
  • 原文地址:https://www.cnblogs.com/amywechat/p/6038301.html
Copyright © 2011-2022 走看看