本文介紹如何在 Blazor Web App 使用獨立賬號驗證(Identity)並關閉用戶註冊功能,同時開啟唯一授權賬號功能。以下步驟包括修改註冊頁面、為特定賬號授權,以及在數據庫中檢查授權是否生效。
第一步:修改 Register.razor 以限制註冊權限
- 打開項目中的
Register.razor
文件。 - 在文件中加入以下命名空間和授權屬性:
@using Microsoft.AspNetCore.Authorization
@attribute [Authorize(Roles = "Admin")]
這樣,只有擁有 Admin
角色的用戶才能訪問註冊頁面。
第二步:為唯一賬號授權
- 修改
Program.cs
文件,添加角色支持和用戶授權代碼:
在 builder.Services.AddIdentityCore
方法中啟用角色支持:
builder.Services.AddIdentityCore(options => options.SignIn.RequireConfirmedAccount = true)
.AddRoles<IdentityRole>() // 啟用角色支持
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddSignInManager()
.AddDefaultTokenProviders();
- 在
app.Run();
之前添加以下代碼,用於初始化角色和唯一賬號授權:
using (var scope = app.Services.CreateScope())
{
var roleManager = scope.ServiceProvider.GetRequiredService<RoleManager<IdentityRole>>();
var userManager = scope.ServiceProvider.GetRequiredService<UserManager<ApplicationUser>>();
// 確保 Admin 角色存在
if (!await roleManager.RoleExistsAsync("Admin"))
{
await roleManager.CreateAsync(new IdentityRole("Admin"));
}
// 可選:為某個特定用戶賦予 Admin 角色(只執行一次)
var adminUser = await userManager.FindByEmailAsync("[email protected]");
if (adminUser != null && !(await userManager.IsInRoleAsync(adminUser, "Admin")))
{
await userManager.AddToRoleAsync(adminUser, "Admin");
}
}
注意:上述代碼只需執行一次,用於初始化 Admin
角色並為指定的用戶授權。
(注:
.AddRoles<IdentityRole>() // 啟用角色支持
這一行除外,因爲主程序驗證role要用)
第三步:驗證授權是否成功
- 運行應用程序。
- 查看數據庫中的相關表:
AspNetUserRoles
表:檢查特定用戶是否被分配了Admin
角色。AspNetRoles
表:確認Admin
角色是否已成功創建。
效果驗證
完成上述步驟後:
- 註冊頁面將僅對
Admin
用戶可見。 - 唯一授權的賬號將擁有
Admin
角色,並可執行相關管理操作。 - 如果需要新增其他授權賬號,只需按照第二步操作手動授權。
這種方法有效防止普通用戶訪問註冊頁面,並確保系統中僅存在唯一的授權賬號。