步骤
1、安装NuGet包
为CitiesManager.Core和CitiesManager.Infrastructure项目安装如下NuGet包(启用Identity)
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="8.0.6" />
2、添加User和Role类
CitiesManager.Core项目中新建Identity文件夹,添加两个类
ApplicationUser.cs
using Microsoft.AspNetCore.Identity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CitiesManager.Core.Identity
{
public class ApplicationUser : IdentityUser<Guid>
{
public string? PersonName { get; set; }
}
}
ApplicationRole.cs
using Microsoft.AspNetCore.Identity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CitiesManager.Core.Identity
{
public class ApplicationRole : IdentityRole<Guid>
{
}
}
3、更新DbContext
ApplicationDbContext.cs中DbContext改为IdentityDbContext
using CitiesManager.Core.Entities;
using CitiesManager.Core.Identity;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
namespace CitiesManager.Infrastructure.DatabaseContext
{
public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, Guid>
{
public ApplicationDbContext(DbContextOptions options) : base(options)
{
}
public ApplicationDbContext()
{
}
public virtual DbSet<City> Cities { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<City>().HasData(new City[]
{
new City
{
CityID = Guid.Parse("F3D83BDE-F859-4C40-BDBE-A3ED8E48D850"),
CityName = "New York",
},
new City
{
CityID = Guid.Parse("FE331780-B359-4707-8455-016D472ED64F"),
CityName = "London",
}
});
}
}
}
4、更新Program.cs
//Identity
builder.Services.AddIdentity<ApplicationUser, ApplicationRole>(options =>
{
options.Password.RequiredLength = 5;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequireLowercase = false;
options.Password.RequireDigit = true;
}).AddEntityFrameworkStores<ApplicationDbContext>().AddDefaultTokenProviders().AddUserStore<UserStore<ApplicationUser, ApplicationRole, ApplicationDbContext, Guid>>().AddRoleStore<RoleStore<ApplicationRole, ApplicationDbContext, Guid>>();
var app = builder.Build();
// Configure the HTTP request pipeline.
app.UseHsts(); //Force to user https
app.UseHttpsRedirection();
app.UseSwagger(); //created endpoint for swagger.json
app.UseSwaggerUI(options =>
{
options.SwaggerEndpoint("/swagger/v1/swagger.json", "1.0");
options.SwaggerEndpoint("/swagger/v2/swagger.json", "2.0");
}); //creates swagger UI for testing all Web Api endpoints/action methods
app.UseRouting();
app.UseCors();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();
结果
到这里,使用Identity的基础准备工作已经完成。
Gitee获取源码: