跟着AI学习C#之项目实战-电商平台 Day3
📅 Day 3:用户系统整合(ASP.NET Core Identity)
✅ 今日目标:
- 集成 ASP.NET Core Identity 用户系统
- 实现 注册、登录、注销功能
- 显示当前用户信息
- 添加 管理员角色管理
- 提交 Git 版本记录进度
🧩 功能概览
页面 | 功能 |
---|---|
/Account/Register | 用户注册 |
/Account/Login | 用户登录 |
/Account/Logout | 用户注销 |
_Layout.cshtml | 显示用户登录状态栏 |
管理员页面 | 创建角色并分配权限 |
🔐 第一步:添加 ASP.NET Core Identity 支持
✅ 安装 NuGet 包
dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore
dotnet add package Microsoft.AspNetCore.Identity.UI
✅ 修改 Program.cs
注册 Identity 服务
using Microsoft.AspNetCore.Identity;var builder = WebApplication.CreateBuilder(args);// 添加 Identity 服务
builder.Services.AddIdentity<IdentityUser, IdentityRole>(options =>
{options.SignIn.RequireConfirmedAccount = false;options.Password.RequireDigit = false;options.Password.RequireLowercase = false;options.Password.RequireUppercase = false;options.Password.RequireNonAlphanumeric = false;options.Password.RequiredLength = 6;
})
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultUI()
.AddDefaultTokenProviders();builder.Services.ConfigureApplicationCookie(options =>
{options.LoginPath = "/Account/Login";options.AccessDeniedPath = "/Account/AccessDenied";
});// 原有代码
builder.Services.AddRazorPages();
builder.Services.AddDbContext<ApplicationDbContext>(options =>options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
🧱 第二步:创建 Identity 页面(使用默认 UI)
✅ 使用 .NET CLI 创建 Identity 页面
dotnet aspnet-codegenerator identity -dc ECommercePlatform.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.Logout"
如果你使用的是 Visual Studio,也可以通过“添加身份”向导完成。
这将自动在 /Areas/Identity/Pages/Account/
下生成注册、登录、注销等页面。
你可以根据需要自定义这些页面样式。
👤 第三步:显示用户登录状态(_Layout.cshtml)
修改 Pages/Shared/_Layout.cshtml
,添加导航栏用户信息:
<ul class="navbar-nav ms-auto">@if (User.Identity.IsAuthenticated){<li class="nav-item"><span class="navbar-text text-dark">你好,@User.Identity.Name!</span></li><li class="nav-item"><a class="nav-link" href="/Identity/Account/Logout">退出</a></li>}else{<li class="nav-item"><a class="nav-link" href="/Identity/Account/Register">注册</a></li><li class="nav-item"><a class="nav-link" href="/Identity/Account/Login">登录</a></li>}
</ul>
👑 第四步:添加管理员角色并授权访问后台页面
✅ 创建种子角色和管理员账户
你可以扩展 ApplicationDbContext.Initialize()
方法来创建默认角色和管理员账号。
✅ 修改 ApplicationDbContext.cs
public static async Task Initialize(IServiceProvider serviceProvider)
{var context = serviceProvider.GetRequiredService<ApplicationDbContext>();await context.Database.EnsureCreatedAsync();var roleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();var userManager = serviceProvider.GetRequiredService<UserManager<IdentityUser>>();string[] roles = { "Admin", "Customer" };foreach (var role in roles){if (!await roleManager.RoleExistsAsync(role)){await roleManager.CreateAsync(new IdentityRole(role));}}// 创建管理员用户var adminEmail = "admin@example.com";var adminUser = await userManager.FindByEmailAsync(adminEmail);if (adminUser == null){adminUser = new IdentityUser { UserName = adminEmail, Email = adminEmail };await userManager.CreateAsync(adminUser, "Admin123!");await userManager.AddToRoleAsync(adminUser, "Admin");}
}
✅ 在 Program.cs
中调用初始化方法
var app = builder.Build();using (var scope = app.Services.CreateScope())
{var services = scope.ServiceProvider;await ApplicationDbContext.Initialize(services);
}
🔒 第五步:限制某些页面仅管理员访问
✅ 添加 [Authorize(Roles = "Admin")]
到后台页面模型
例如,如果你未来要创建一个 /Pages/Admin/Dashboard.cshtml
页面,可以这样写:
[Authorize(Roles = "Admin")]
public class DashboardModel : PageModel
{public void OnGet(){}
}
📦 第六步:提交 Git 版本
git add .
git commit -m "Day3: Added Identity user system with register, login, logout and role management"
📝 今日总结
今天你完成了:
✅ 集成 ASP.NET Core Identity 用户系统
✅ 实现用户注册、登录、注销功能
✅ 显示用户登录状态栏
✅ 创建管理员角色并设置初始管理员账号
✅ 提交版本控制记录
📆 明日计划(Day4)
我们将进入 购物车功能实现阶段:
- 创建
CartItem
模型 - 使用 Session 或数据库存储购物车数据
- 实现加入购物车、查看购物车功能
- 提交 Git 记录