EKsumic's Blog

let today = new Beginning();

Click the left button to use the catalog.

OR

如何在 Blazor Web App 中實現關閉註冊並啟用唯一授權賬號

本文介紹如何在 Blazor Web App 使用獨立賬號驗證(Identity)並關閉用戶註冊功能,同時開啟唯一授權賬號功能。以下步驟包括修改註冊頁面、為特定賬號授權,以及在數據庫中檢查授權是否生效。

 

第一步:修改 Register.razor 以限制註冊權限

  1. 打開項目中的 Register.razor 文件。
  2. 在文件中加入以下命名空間和授權屬性:
@using Microsoft.AspNetCore.Authorization
@attribute [Authorize(Roles = "Admin")]

這樣,只有擁有 Admin 角色的用戶才能訪問註冊頁面。

 

第二步:為唯一賬號授權

  1. 修改 Program.cs 文件,添加角色支持和用戶授權代碼:

builder.Services.AddIdentityCore 方法中啟用角色支持:

builder.Services.AddIdentityCore(options => options.SignIn.RequireConfirmedAccount = true)
    .AddRoles<IdentityRole>() // 啟用角色支持
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddSignInManager()
    .AddDefaultTokenProviders();
  1. 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要用)

 

第三步:驗證授權是否成功

  1. 運行應用程序。
  2. 查看數據庫中的相關表:
    • AspNetUserRoles 表:檢查特定用戶是否被分配了 Admin 角色。
    • AspNetRoles 表:確認 Admin 角色是否已成功創建。

 

效果驗證

完成上述步驟後:

  • 註冊頁面將僅對 Admin 用戶可見。
  • 唯一授權的賬號將擁有 Admin 角色,並可執行相關管理操作。
  • 如果需要新增其他授權賬號,只需按照第二步操作手動授權。

這種方法有效防止普通用戶訪問註冊頁面,並確保系統中僅存在唯一的授權賬號。

This article was last edited at 2025-01-08 17:58:55

* *