Bob*_*lth 2 asp.net-identity .net-core asp.net-core
现在,ASP.NET Core 2.x将标识页面和逻辑隐藏在库中。为了IdentityUser使用新属性扩展实体并添加UI和逻辑以处理这些新属性,我们现在运行“ Identity scaffolder”(在MyProject-> Add-> New scaffolded项下)。不幸的是,这些文档充其量是不完整的,在很多情况下,它们完全是错误的。
我正在努力弄清楚如何对脚手架和最终代码进行搏斗,以实现我认为是相当标准的用例:
IdentityUser自己的属性。由于这涉及创建继承的类,因此我希望该新类的名称为ApplicationUser。ApplicationDbContext我的问题是,阅读文档并使用Identity脚手架时,我不知道如何获得该脚手架以让我扩展IdentityUser 并继续使用现有的ApplicationDbContext。
在盯着文档并使用了脚手架和生成的代码之后,我想我已经弄清楚了大部分内容。
ApplicationDbContext。ApplicationDbContext此时,您的项目已连接到现有项目ApplicationDbContext和IdentityUser类。现在,您可以扩展IdentityUser并连接“身份”页面以使用新的扩展实体:
添加一个ApplicationUser继承自的新类IdentityUser:
public class ApplicationUser : IdentityUser
{
public string Nickname { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
将新ApplicationUser实体添加到ApplicationDbContext类中:
public class ApplicationDbContext : IdentityDbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
public DbSet<ApplicationUser> AppUsers { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
替换的所有实例<IdentityUser>用<ApplicationUser>。这意味着您将把startup.cs更改为call services.AddDefaultIdentity<ApplicationUser>(),并将替换所有引用,SigninManager并UserManager指定新的<ApplicationUser>Type参数。
......现在,您可以进入Register.cshtml.cs之类的内容并创建(或获取)一个新的ApplicationUser而不是an 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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1046 次 |
| 最近记录: |