我有一个继承自IdentityUser
的类层次结构,我想知道除了IdentityUser
中已经定义的与身份验证相关的内容之外,如果我的层次结构中“没有”,我需要做什么?
我可以继承它并在使用时创建对象
.AddDefaultIdentity<IdentityUser>()
或者当我的用户是IdentityUser
的子类型时,即使我没有使用他们的任何属性进行身份验证,它也不会起作用?
我没有叶子节点,因为用户分支的层次结构,所以我不能真正使用最低级别。
我可以继承它并在使用时创建对象
添加身份服务时应注册新对象。
services.AddDefaultIdentity<ApplicationUser>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultUI();
我们通常扩展IdentityUser
以涉及用户的自定义属性:
public class ApplicationUser : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
因为我在网上找不到一个例子(他们都展示了如何使用自定义用户类型,而不是层次结构)我尝试并挖掘了一些代码。
显然,使用从IdentityUser继承的任何对象(或者在qazxsw poi中指定为用户的任何类都没有问题。
当试图创建一个用户传递从该类继承的对象时,将在数据库中创建适当的对象(该对象不会在AddDefaultIdentity
中生成,而是通过在上下文本身上添加简单的添加到上下文中,而不是在类型化的DBSet上)。
相关代码可以在UserStore的源代码中找到:UserManager.CreateAsync
第165行,我们可以看到有一个简单的
https://github.com/aspnet/Identity/blob/master/src/EF/UserStore.cs
让EF核心在DB中创建适当的鉴别器。
总的来说,如果不需要自定义身份验证/身份,并且只需要向用户添加更多信息,那么拥有用户层次结构似乎工作正常并且在服务中声明的默认Context.Add(user);
类不会造成任何问题。
我还没有测试它是否会导致通过UserManager检索用户的问题,因为我的用例不需要它。