112 lines
3.8 KiB
C#
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(); |