当前位置: 首页 > news >正文

跟着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 记录
http://www.lqws.cn/news/544771.html

相关文章:

  • 《聊一聊ZXDoc》之汽车服务导向SOME/IP
  • 自动登录脚本神器-Mac电脑实现自动登录堡垒机并自动输入账号密码跳转不同机器环境
  • uniapp处理后端返回的html字符串
  • spring-security-oauth2系列:自定义认证服务器
  • 为什么python处理csv文件将某个值替换成另一个值并另存后,csv文件的大小减小了一半
  • Nginx 与 Apache:有什么区别?哪种服务器最适合您?
  • 【数据挖掘】数据采集和预处理
  • 如何确保京东商品数据采集的准确性和及时性?
  • 【lua】Linux上安装lua和luarocks包管理工具
  • 提升AI准确性的关键:精准添加上下文
  • 【NodeJs】【npm】npm安装electron报错
  • Python Async 编程快速入门 | 超简明异步协程指南
  • C++常用算法解析:sort、find、for_each、copy
  • 阶段二开始-第一章—8天Python从入门到精通【itheima】-116节(封装)
  • cuda编程笔记(5)--原子操作
  • UI前端与数字孪生结合案例分享:智慧零售的可视化解决方案
  • 北京燃气集团管道腐蚀智能预测实践:LSTM算法驱动能源设施安全升级
  • VSCode中创建和生成动态库项目
  • 智能呼叫系统五大核心模式解析
  • 使用mitmdump实现高效实时抓包处理:从原理到实践
  • 技术博客:如何用针孔相机模型理解图像
  • 基于Redis分布式的限流
  • 一款专业的顽固软件卸载工具
  • ubuntu下利用Qt添加相机设备并运行arm程序
  • GO 语言学习 之 变量和常量
  • 神经形态计算与人工智能的融合:从生物启发到智能跃迁的IT新纪元
  • 本地部署Dify+Ragflow及使用(一)
  • PHP语法基础篇(六):数组
  • 通达信 稳定盈利多维度趋势分析系统
  • 鸿蒙OS开发IoT控制应用:从入门到实践