在實際使用時會發現很多字段在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