凝视之后并使用脚手架和生成的代码,我想我已经弄清楚了大部分内容。
- 从新的 ASP.NET Core Web 应用程序开始,使用“个人用户帐户”身份验证。显然,无论您是从“Web 应用程序”(即 Razor Pages)还是“Web 应用程序(模型-视图-控制器)”(即 MVC)开始并不重要。最后,身份页面将是 Razor 页面,但它们在 MVC 应用程序中运行得很好。
- 构建解决方案。我不确定这是否有必要,但这并没有什么坏处......
- 在你走得更远之前,确保您喜欢您的数据库连接字符串(在 appsettings.json 中)。在包管理器控制台中,输入命令更新数据库。这显然会更新 ApplicationDbContextModelSnapshot.cs 文件以包含从项目模板获得的初始迁移。如果您跳过此步骤,那么当您添加第一个迁移时,它将包括 00000000000000_CreateIdentitySchema.cs 中已有的所有迁移步骤。此外,这一步显然是必要的,以便脚手架工能够识别现有的
ApplicationDbContext
.
- 右键单击该项目并选择添加 -> 新脚手架项目;选择Identity物品种类
- 指定现有的 _Layout.cshtml 并选择要搭建的页面
- 在数据上下文类旁边,单击下拉箭头并选择现有的
ApplicationDbContext
- 单击“添加”按钮以执行脚手架。
此时,您的项目已连接到现有的ApplicationDbContext
and IdentityUser
类。现在,您可以扩展IdentityUser
并连接身份页面以使用新的扩展实体:
添加新的ApplicationUser
继承自的类IdentityUser
:
public class ApplicationUser : IdentityUser
{
public string Nickname { get; set; }
}
添加新的ApplicationUser
实体到ApplicationDbContext
class:
public class ApplicationDbContext : IdentityDbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
public DbSet<ApplicationUser> AppUsers { get; set; }
}
替换所有实例<IdentityUser>
with <ApplicationUser>
。这意味着您将更改startup.cs来调用services.AddDefaultIdentity<ApplicationUser>()
,并且您将替换所有引用SigninManager
and UserManager
指定新的<ApplicationUser>
键入参数。
哇...现在,您可以进入 Register.cshtml.cs 之类的内容并创建(或获取)一个新的ApplicationUser
而不是一个IdentityUser
,所有的管道都将连接到ApplicationUser
。例如,Register.cshtml.cs 中的代码可能如下所示:
var user = new ApplicationUser {
UserName = Input.Email,
Email = Input.Email,
Nickname = Input.Nickname // New property
};
var result = await _userManager.CreateAsync(user, Input.Password);