ASP.NET Core 2.x 现在隐藏了库中的标识页面和逻辑。为了延长IdentityUser
具有新属性的实体并添加 UI 和逻辑来处理这些新属性,我们现在可以运行“身份脚手架”(在 MyProject -> Add -> New scaffolded item 下)。不幸的是,the docs充其量是不完整的,并且在很多情况下,完全错误。
我正在努力弄清楚如何解决脚手架和生成的代码来实现我认为是一个非常标准的用例:
IdentityUser
用我自己的属性。由于这涉及创建一个继承类,我希望该新类的名称为 ApplicationUser
. ApplicationDbContext
我的问题是,阅读文档并使用 Identity 脚手架时,我不知道如何让脚手架让我扩展
IdentityUser
并继续使用现有的 ApplicationDbContext
.
最佳答案
后盯着the docs玩弄脚手架和生成的代码,我想我已经弄清楚了大部分。
ApplicationDbContext
. ApplicationDbContext
此时,您的项目已连接到现有
ApplicationDbContext
和 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>
的所有实例与 <ApplicationUser>
.这意味着您将更改 startup.cs 以调用 services.AddDefaultIdentity<ApplicationUser>()
,您将替换对 SigninManager
的所有引用和 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);
关于asp.net-core - 带有 AppplicationDbContext 的身份脚手架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51351327/