gpt4 book ai didi

c# - 当可以从用户对象中提取所需的属性时,像 GetPhoneNumberAsync(IdentityUser user) 这样的 UserManager 方法的目的是什么?

转载 作者:行者123 更新时间:2023-12-03 21:16:55 24 4
gpt4 key购买 nike

我试图了解 ASP.Net Core Identity UI View 背后的一些逻辑。

例如,Account\Manage\Index.cshtml.cs 包含以下代码:

    private async Task LoadAsync(IdentityUser user)
{
var userName = await _userManager.GetUserNameAsync(user);
var phoneNumber = await _userManager.GetPhoneNumberAsync(user);

Username = userName;

Input = new InputModel
{
PhoneNumber = phoneNumber
};
}

为什么调用 _userManager.GetPhoneNumberAsync(user),而我们可以直接从用户对象中提取 PhoneNumber 属性?

最佳答案

默认身份设置由 Entity Framework 映射到数据库的实体组成这一事实是用户管理器不关心的实现细节。用户管理器实际上是以一种方式实现的,它主要充当 facade到提供密码验证、散列等功能的各种单独组件。

这些组件之一是 IUserStore<> 它负责以某种方式实际持久化身份对象。

默认实现是 UserStore<> Microsoft.AspNetCore.Identity.EntityFrameworkCore .请注意,命名空间包括 EntityFrameworkCore所以这是唯一特定于用户对象如何持久化的东西:使用 EF Core。

一般IUserStore<>只负责实际存储和存储用户对象。但是,商店实现可以通过各种功能标志接口(interface)启用附加功能,例如电话号码支持。例如 IUserClaimStore<> ,
IUserEmailStore<> ,
IUserPhoneNumberStore<> ,
IUserTwoFactorStore<> .然后,用户管理器上的所有高级方法将通过这些方法来确定 (a) 对该功能的支持,以及 (b) 如何获取这些值。

因此,如果您只将用户视为由 ORM 持久化的实体,那么用户管理器的这种设计似乎很复杂,但它实际上允许在用户管理器后面交换整个架构,而不会在前面影响它。这就是默认身份 UI 使用这些方法的原因,不必依赖用户是实体的实现细节,而是通过用户管理器检索它需要的值。

这对您的应用程序有影响吗?可能不是。如果您决定使用带有 IdentityUser 的默认用户存储,那么您可以直接访问属性。应用程序不太可能在以后完全切换,而且您可能还必须进行其他更改。因此,对于您的应用程序代码,您可以直接访问实体的属性。

关于c# - 当可以从用户对象中提取所需的属性时,像 GetPhoneNumberAsync(IdentityUser user) 这样的 UserManager 方法的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59658019/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com