ASPNET Identity

ASPNET Identity#

  1. 在CleanArchitecture.Domain中安装Microsoft.AspNetCore.Identity.EntityFrameworkCore

Install-Package Microsoft.AspNetCore.Identity.EntityFrameworkCore -Version 9.0.1  
  1. 在CleanArchitecture.Domain中新建User实体类

using Microsoft.AspNetCore.Identity;

namespace CleanArchitecture.Domain.Entities;

public class User : IdentityUser
{
}
  1. 修改CleanArchitecture.Infrastructure中修改RestaurantsDbContext.cs代码

using CleanArchitecture.Domain.Entities;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;

namespace CleanArchitecture.Infrastructure.Persistence;

internal class RestaurantsDbContext(DbContextOptions<RestaurantsDbContext> options) : IdentityDbContext<User>(options)
{
    internal DbSet<Restaurant> Restaurants { get; set; }
    internal DbSet<Dish> Dishes { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.ApplyConfigurationsFromAssembly(GetType().Assembly);
    }
}
  1. 在CleanArchitecture.API中修改Program.cs代码

app.MapGroup("api/identity").MapIdentityApi<User>();
  1. 在程序包管理器控制台依次执行以下命令执行迁移,查看数据库表结构

Add-Migration  IdentityAdd  
Update-Database  
  1. 运行程序,访问http://localhost:5000/api/identity/register,使用Postman发送请求,注册一个用户

    1. 如果一开始项目并没有配置Swagger,需要配置,不然没有

    2. 在CleanArchitecture.API中修改Program.cs代码

    builder.Services.AddEndpointsApiExplorer();
    
  2. 在CleanArchitecture.API中新建WebApplicationBuilderExtensions.cs 单独抽离出来

using CleanArchitecture.API.Middlewares;
using Microsoft.OpenApi.Models;
using Serilog;

namespace CleanArchitecture.API.Extensions;

public static class WebApplicationBuilderExtensions
{
    public static void AddPresentation(this WebApplicationBuilder builder)
    {
        builder.Services.AddControllers();
        builder.Services.AddSwaggerGen(c =>
        {
            c.AddSecurityDefinition("bearerAuth", new OpenApiSecurityScheme
            {
                Type = SecuritySchemeType.Http,
                Scheme = "Bearer"
            });

            c.AddSecurityRequirement(new OpenApiSecurityRequirement
            {
                {
                    new OpenApiSecurityScheme
                    {
                        Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "bearerAuth"}
                    },
                    []
                }

            });
        });
        builder.Services.AddEndpointsApiExplorer();

        builder.Services.AddScoped<ErrorHandlingMiddleware>();
        builder.Services.AddScoped<RequestTimeLoggingMiddleware>();

        builder.Host.UseSerilog((context, configuration) =>
            configuration.ReadFrom.Configuration(context.Configuration)
        );
    }
}

在CleanArchitecture.API中修改Program.cs代码

builder.AddPresentation();