ASP.NET Core Identity 是一个用于处理用户身份验证和授权的框架。要在 ASP.NET Core 项目中实现认证,你需要遵循以下步骤:
安装 ASP.NET Core Identity NuGet 包: 在 Visual Studio 中,右键单击项目,然后选择 “管理 NuGet 程序包”。搜索 “Microsoft.AspNetCore.Identity” 并安装它。
创建用户和角色模型:
创建一个继承自 IdentityUser
的类来表示用户模型,以及一个继承自 IdentityRole
的类来表示角色模型。
public class ApplicationUser : IdentityUser
{
// 添加其他用户属性
}
public class ApplicationRole : IdentityRole
{
// 添加其他角色属性
}
配置 Identity:
在 Startup.cs
文件中,配置 Identity 服务并将其添加到依赖注入容器中。
public void ConfigureServices(IServiceCollection services)
{
services.AddIdentity<ApplicationUser, ApplicationRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
// 其他服务配置
}
创建数据库上下文:
创建一个继承自 IdentityDbContext
的类来表示应用程序的数据库上下文。
public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
}
配置数据库连接:
在 appsettings.json
文件中,配置数据库连接字符串。
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=YourDatabaseName;Trusted_Connection=True;MultipleActiveResultSets=true"
}
迁移数据库: 在 Visual Studio 中,右键单击项目,然后选择 “管理 NuGet 程序包”。搜索 “Microsoft.EntityFrameworkCore.Tools” 并安装它。运行以下命令以创建数据库表:
dotnet ef migrations add InitialCreate
dotnet ef database update
实现登录、注册和注销功能: 使用 ASP.NET Core Identity 提供的 API 实现登录、注册和注销功能。例如,在控制器中添加以下方法:
[HttpPost("register")]
public async Task<IActionResult> Register([FromBody] RegisterModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
var result = await _userManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
await _signInManager.SignInAsync(user, isPersistent: false);
return Ok();
}
foreach (var error in result.Errors)
{
ModelState.AddModelError(string.Empty, error.Description);
}
}
return BadRequest(ModelState);
}
[HttpPost("login")]
public async Task<IActionResult> Login([FromBody] LoginModel model)
{
if (ModelState.IsValid)
{
var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: true);
if (result.Succeeded)
{
return Ok();
}
if (result.IsLockedOut)
{
ModelState.AddModelError(string.Empty, "Account locked due to multiple failed login attempts.");
return BadRequest(ModelState);
}
ModelState.AddModelError(string.Empty, "Invalid login attempt.");
}
return BadRequest(ModelState);
}
[HttpPost("logout")]
public async Task<IActionResult> Logout()
{
await _signInManager.SignOutAsync();
return Ok();
}
配置路由:
在 Startup.cs
文件中,配置路由以处理身份验证相关的请求。
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
遵循以上步骤,你可以在 ASP.NET Core 项目中实现认证功能。