1. 新建class ApplicationUser
//继承IdentityUser进行新增一些自定义字段
public class ApplicationUser : IdentityUser
{
//补充的新字段
public string Address { get; set; }
//shoppingCart
//orders
// 用户角色 用户权限 用户信息 用户登录tokens 重新绑定与父类的关系 命名必须和父类一致
public virtual ICollection<IdentityUserRole<string>> UserRoles { get; set; }
public virtual ICollection<IdentityUserClaim<string>> Claims { get; set; }
public virtual ICollection<IdentityUserLogin<string>> Logins { get; set; }
public virtual ICollection<IdentityUserToken<string>> Tokens { get; set; }
}
2. 全局用到IdentityUser的地方替换ApplicationUser(禁止替换migration 生成的数据源文件)
3. 设置基础数据
//初始化用戶与角色的种子数据
//1. 更新用戶与角色的外鍵
modelBuilder.Entity<ApplicationUser>(
u => u.HasMany(x => x.UserRoles).WithOne().HasForeignKey(ur => ur.UserId).IsRequired()
);
//2. 添加管理员角色
var adminRoleId = "f8df1775-e889-46f4-acdd-421ec8d9ba64";
modelBuilder.Entity<IdentityRole>().HasData(
new IdentityRole()
{
Id = adminRoleId,
Name = "Admin",
NormalizedName = "Admin".ToUpper()
}
);
//3. 添加用户
var adminUserId = "f8df1775-e889-46f4-acdd-421ec8d9ba65";
ApplicationUser adminUser = new ApplicationUser
{
Id = adminUserId,
UserName = "admin@qq.com",
NormalizedEmail = "admin@qq.com".ToUpper(),
Email = "admin@qq.com",
TwoFactorEnabled = false,
EmailConfirmed = true,
PhoneNumber = "123456789",
PhoneNumberConfirmed = false,
};
var ph = new PasswordHasher<ApplicationUser>();
adminUser.PasswordHash = ph.HashPassword(adminUser, "lah123465.");
modelBuilder.Entity<ApplicationUser>().HasData(adminUser);
//4. 给用户加入管理员角色
modelBuilder.Entity<IdentityUserRole<string>>().HasData(
new IdentityUserRole<string>()
{
RoleId = adminRoleId,
UserId = adminUserId
}
);
4. 更新数据库
这篇博客介绍了如何在ASP.NET Core中扩展IdentityUser类以添加自定义字段,如地址,并全局替换IdentityUser为自定义的ApplicationUser。接着展示了如何设置数据库迁移以包含这些变化,并初始化用户和角色数据,包括创建一个管理员用户并分配管理员角色。这个过程涉及到用户角色的外键配置、种子数据的定义以及数据库的更新。
1360

被折叠的 条评论
为什么被折叠?



