如何以尽可能少的工作继承UserIdentity?

问题描述 投票:-1回答:2

我有一个继承自IdentityUser的类层次结构,我想知道除了IdentityUser中已经定义的与身份验证相关的内容之外,如果我的层次结构中“没有”,我需要做什么?

我可以继承它并在使用时创建对象

            .AddDefaultIdentity<IdentityUser>()

或者当我的用户是IdentityUser的子类型时,即使我没有使用他们的任何属性进行身份验证,它也不会起作用?

我没有叶子节点,因为用户分支的层次结构,所以我不能真正使用最低级别。

c# asp.net-core .net-core entity-framework-core asp.net-identity
2个回答
0
投票

我可以继承它并在使用时创建对象

添加身份服务时应注册新对象。

services.AddDefaultIdentity<ApplicationUser>()
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddDefaultUI();

我们通常扩展IdentityUser以涉及用户的自定义属性:

public class ApplicationUser : IdentityUser
{
    public string FirstName { get; set; }

    public string LastName { get; set; }
}

参考:https://docs.microsoft.com/en-us/aspnet/core/security/authentication/customize-identity-model?view=aspnetcore-2.2


0
投票

因为我在网上找不到一个例子(他们都展示了如何使用自定义用户类型,而不是层次结构)我尝试并挖掘了一些代码。

显然,使用从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检索用户的问题,因为我的用例不需要它。

© www.soinside.com 2019 - 2024. All rights reserved.