ASP.NET Core 6 MVC 自訂身分驗證資料表

在上一篇 從頭開始使用 ASP.NET Core 自訂身分驗證功能 建立完專案並能夠使用登入功能後,已經在 SqlLocalDB 中建立資料庫了,連進資料庫後發現預設資料表如下:

總共會自動產生 7 張資料表,所有資料表如下:AspNetRoles, AspNetRoleClaims, AspNetUsers, AspNetUserClaims, AspNetUserLogins, AspNetUserRoles, AspNetUserTokens

所有資料表都以 AspNet 開頭,未來增加其他資料表時很可能不會前面加上 AspNet,但這樣會和我們命名規則不一致,那要如何自訂 ASP.NET Core 的使用者身分驗證資料表呢?

最簡單的方式就是在 ApplicationDbContext.cs 裡面複寫 OnModelCreating 方法,就可以很簡單的自訂資料表名稱,也可以調整欄位名稱和忽略(隱藏)沒有使用到的欄位
    

using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;

public class ApplicationDbContext : IdentityDbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }

    protected override void OnModelCreating(ModelBuilder builder)
    {
        // 將 AspNetUsers 資料表名稱改為 users
        builder.Entity<IdentityUser>().ToTable("users", "dbo");

        // 忽略 AspNetUsers 資料表的 PhoneNumber 和 PhoneNumberConfirmed 欄位
        builder.Entity<IdentityUser>()
            .Ignore(p => p.PhoneNumber)
            .Ignore(p => p.PhoneNumberConfirmed);

        // 將 AspNetUsers 的 Id 欄位改名為 user_id
        builder.Entity<IdentityUser>().Property(p => p.Id).HasColumnName("user_id");

        base.OnModelCreating(builder);
    }
}
    

註:資料庫中的資料表內容無法自動更新,需要手動調整欄位。 這樣的方式適合已經建立好的資料庫,只要設定好既有的欄位即可。 如果覺得這樣不是很方便,還有其他更好的方式,就是自訂身分模型,不過就要等下次再介紹了

參考資料:
Change table/column names and facets

留言