zoukankan      html  css  js  c++  java
  • Identity用户管理入门七(扩展用户字段)

    在实际使用时会发现很多字段在IdentityUser中并不存在,比如增加生日,地址等字段,可在模型类中实现自己的模型并继承自IdentityUser,需要修改的代码为以下类

    一、新增模型

    using System;
    using Microsoft.AspNetCore.Identity;
    
    namespace Shop.Models
    {
        public class MyUser:IdentityUser
        {
            public string IdCard { get; set; }
            public DateTime Birthday { get; set; }
        }
    }

    二、修改Startup.cs

    修改前
    services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
        .AddEntityFrameworkStores<ApplicationDbContext>();
    修改后
    services.AddDefaultIdentity<MyUser>(options => options.SignIn.RequireConfirmedAccount = true)
        .AddEntityFrameworkStores<ApplicationDbContext>();

    三、修改ApplicationDbContext.cs

    using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
    using Microsoft.EntityFrameworkCore;
    
    namespace Shop.Models
    {
        public class ApplicationDbContext:IdentityDbContext<MyUser>
        {
            public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
                : base(options)
            {
            }
            public DbSet<Region> Region { get; set; }
        }
    }

    四、更新扩展字段到数据库

    PM> Add-Migration addExtUser
    PM> Update-Database

    五、修改实现代码,以创建用户为例,红色字体为继承自IdentityUser的类库

    [HttpPost]
    public async Task<IActionResult> Register(CreateUserViewModel input)
    {
        if (ModelState.IsValid)
        {
            var user = new MyUser()
            {
                Id = input.id,
                UserName = input.UserName,
                Email = input.Email,
                PhoneNumber = input.PhoneNumber,
                Birthday = input.Birthday
    
            };
            //创建用户
            var result = await _userManager.CreateAsync(user,input.PasswordHash);
            //如果成功则返回用户列表
            if (result.Succeeded)
            {
                return RedirectToAction("Index");
            }
        }
        return View(input);
    }

    可看到Birthday已经可以使用,视图记得@model引用也修改下才能展示,如下代码

    @model IEnumerable<MyUser>
    @inject SignInManager<MyUser> SignInManager
  • 相关阅读:
    微信扫码支付模式一和模式二的区别
    spring boot MongoDB的集成和使用
    Java 8 中的 Streams API 详解
    大并发量的订单的解析
    Springboot项目打成war包,部署到tomcat上,正常启动访问报错404
    最详细的虚拟机安装centos7教程
    nginx限制上传大小和超时时间设置说明/php限制上传大小
    一级域名和二级域名的区别是什么?分别有什么作用?
    快递物流查询接口介绍
    java 使用volatile实现线程数据的共享
  • 原文地址:https://www.cnblogs.com/liessay/p/13208941.html
Copyright © 2011-2022 走看看