lq1405 57402e0dda V1.0.4
1. 新增用户注册需要邮箱验证码
2. 机器码、软件权限控制、用户 隔离,除非超级管理员,其他用户只能看到自己下面的用户,管理员可以看到除超级管理员以外的所有
2025-03-16 23:01:50 +08:00

112 lines
3.8 KiB
C#

using Lai_server.Configuration;
using LMS.DAO;
using LMS.Repository.Models.DB;
using LMS.service.Configuration;
using LMS.service.Configuration.InitConfiguration;
using LMS.service.Extensions.Middleware;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using Serilog;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
builder.Services.AddAuthentication();
// 添加跨域
builder.Services.AddCorsServices();
// 配置注入自定义服务方法
builder.Services.AddServices();
builder.Services.ConfigureApplicationCookie(options =>
{
options.Cookie.HttpOnly = true;
options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
options.Cookie.SameSite = SameSiteMode.None;
});
//配置JWT
builder.Services.AddJWTAuthentication();
builder.Services.AddAutoMapper(typeof(AutoMapperConfig));
builder.Services.AddLoggerService();
builder.Host.UseSerilog();
// 关键步骤:注册 Serilog.ILogger 到 DI 容器
builder.Services.AddSingleton(Log.Logger);
builder.Services.AddDbContext<ApplicationDbContext>(options =>
{
string connectionString = $"server={Environment.GetEnvironmentVariable("DATABASE_SERVER")};port={Environment.GetEnvironmentVariable("DATABASE_PORT")};user={Environment.GetEnvironmentVariable("DATABASE_USER")};password={Environment.GetEnvironmentVariable("DATABASE_PASSWORD")};database={Environment.GetEnvironmentVariable("DATABASE_NAME")};ConvertZeroDateTime=True;SslMode={Environment.GetEnvironmentVariable("DATABASE_SSL_MODE") ?? "None"};";
options.UseMySql(connectionString, ServerVersion.Parse("8.0.18-mysql"));
});
builder.Services.AddIdentityCore<User>(options =>
{
options.SignIn.RequireConfirmedAccount = true; //已有账号才能登录
options.SignIn.RequireConfirmedEmail = true; //
options.Password.RequireDigit = true; // 数据库中至少有一个数字
options.Password.RequireLowercase = true; // 数据库中至少有一个小写字母
options.Password.RequireUppercase = true; // 数据库中至少有一个大写字母
options.Password.RequireNonAlphanumeric = true; // 数据库中至少有一个特殊字符
options.Password.RequiredLength = 8; // 密码长度最少8位
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5); // 锁定时间
options.Lockout.MaxFailedAccessAttempts = 10; // 尝试次数
options.Lockout.AllowedForNewUsers = true; // 新用户是否可以锁定
options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+"; // 用户名允许的字符
options.User.RequireUniqueEmail = true; // 允许重复邮箱
//options.User.
});
var idBuilder = new IdentityBuilder(typeof(User), typeof(Role), builder.Services);
idBuilder.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders()
.AddUserManager<UserManager<User>>()
.AddRoleManager<RoleManager<Role>>();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
// 注入Swagger
builder.Services.AddSwaggerService();
builder.Services.AddHostedService<RsaConfigurattions>();
builder.Services.AddHostedService<DatabaseConfiguration>();
var app = builder.Build();
var version = builder.Configuration["Version"];
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
app.UseWhen(context => context.Request.Path.Value == "/", builder =>
builder.Run(context =>
{
context.Response.Redirect("/swagger");
return Task.CompletedTask;
}));
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseCors("AllowAll");
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.UseMiddleware<DynamicPermissionMiddleware>();
app.UseEndpoints(endpoints =>
{
_ = endpoints.MapControllers();
});
Log.Information("后台启动成功,系统版本:" + version);
app.Run();