https://docs.microsoft.com/zh-cn/aspnet/core/security/authentication/customize_identity_model?view=aspnetcore-2.1 参考地址
-
标识模型包含七个实体类型:
User
-表示的用户Role
-表示的角色UserClaim
-表示用户拥有的声明UserToken
-表示用户的身份验证令牌UserLogin
-将用户与一个登录名相关联RoleClaim
-表示将授予角色中的所有用户的声明UserRole
-加入将用户和角色相关联的实体
实体类型关系
这些实体类型通过以下方式彼此相关:
- 每个
User
可以具有许多UserClaims
- 每个
User
可以具有许多UserLogins
- 每个
User
可以具有许多UserTokens
- 每个
Role
可以具有许多关联RoleClaims
- 每个
User
可以具有许多关联Roles
,和每个Role
可以与多个用户相关联- 这是一个多对多关系,这需要在数据库中的联接表。 联接表均由表示
UserRole
实体。
- 这是一个多对多关系,这需要在数据库中的联接表。 联接表均由表示
dotnet new mvc -o IdentityMvc cd IdentityMvc dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore
Startup.cs->ConfigureServices
using IdentityMvc.Data;
using Microsoft.EntityFrameworkCore;
using IdentityMvc.Models;
using Microsoft.AspNetCore.Identity;
1 services.AddDbContext<ApplicationDbContext>(options => 2 options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); 3 4 services.AddIdentity<ApplicationUser, IdentityRole>() 5 .AddEntityFrameworkStores<ApplicationDbContext>() 6 .AddDefaultTokenProviders(); 7 8 services.Configure<IdentityOptions>(options => 9 { 10 // Password settings 11 options.Password.RequireDigit = true; 12 options.Password.RequiredLength = 8; 13 options.Password.RequireNonAlphanumeric = false; 14 options.Password.RequireUppercase = true; 15 options.Password.RequireLowercase = false; 16 options.Password.RequiredUniqueChars = 6; 17 18 // Lockout settings 19 options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(30); 20 options.Lockout.MaxFailedAccessAttempts = 10; 21 options.Lockout.AllowedForNewUsers = true; 22 23 // User settings 24 options.User.RequireUniqueEmail = true; 25 }); 26 27 services.ConfigureApplicationCookie(options => 28 { 29 // Cookie settings 30 options.Cookie.HttpOnly = true; 31 options.Cookie.Expiration = TimeSpan.FromDays(150); 32 // If the LoginPath isn't set, ASP.NET Core defaults 33 // the path to /Account/Login. 34 options.LoginPath = "/Account/Login"; 35 // If the AccessDeniedPath isn't set, ASP.NET Core defaults 36 // the path to /Account/AccessDenied. 37 options.AccessDeniedPath = "/Account/AccessDenied"; 38 options.SlidingExpiration = true; 39 });
Data->ApplicationDbContext 新建
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Threading.Tasks; 5 using Microsoft.AspNetCore.Identity.EntityFrameworkCore; 6 using Microsoft.EntityFrameworkCore; 7 using IdentityMvc.Models; 8 9 namespace IdentityMvc.Data 10 { 11 public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 12 { 13 public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) 14 : base(options) 15 { 16 } 17 18 protected override void OnModelCreating(ModelBuilder builder) 19 { 20 base.OnModelCreating(builder); 21 // Customize the ASP.NET Identity model and override the defaults if needed. 22 // For example, you can rename the ASP.NET Identity table names and more. 23 // Add your customizations after calling base.OnModelCreating(builder); 24 } 25 } 26 }
Models->ApplicationUser 新建
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Threading.Tasks; 5 using Microsoft.AspNetCore.Identity; 6 7 namespace IdentityMvc.Models 8 { 9 // Add profile data for application users by adding properties to the ApplicationUser class 10 public class ApplicationUser : IdentityUser 11 { 12 } 13 }
appsettings.json 加入数据库连接
"ConnectionStrings": { "DefaultConnection": "Server=(localdb)\mssqllocaldb;Database=aspnet-ids-3D54E4B2-38C1-466C-A12F-E9CCF493B11B;Trusted_Connection=True;MultipleActiveResultSets=true" },
最后生成编译,
生成数据库映射表
更新数据库
dotnet build dotnet ef migrations add Initial -o Data/Migrations dotnet ef database update