跟着AI学习C#之项目实战-电商平台 Day3

发布于:2025-06-28 ⋅ 阅读:(21) ⋅ 点赞:(0)

📅 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 记录

网站公告

今日签到

点亮在社区的每一天
去签到