gpt4 book ai didi

c# - ASP.NET Identity中UserStore和UserManager的使用有什么区别?

转载 作者:IT王子 更新时间:2023-10-29 04:21:04 24 4
gpt4 key购买 nike

我是 ASP.NET Identity 的新手,如果这个问题看起来很愚蠢,请多多包涵。

当我在下面的链接中阅读 Microsoft 网站上 UserStoreUserManager 类的定义时,看起来这两个类都定义了围绕用户的操作(例如添加、查找、删除和修改)。

那么我什么时候使用一个而不是另一个?

https://msdn.microsoft.com/en-us/library/dn315446(v=vs.108).aspx https://msdn.microsoft.com/en-us/library/dn613290(v=vs.108).aspx

最佳答案

那里的事情相当复杂,本来可以更容易的。

UserManger 是 ... 管理器。它并不真正与存储、数据库交互。这就是 UserStore 所做的。

事实上 UserManager 有一个 constructor这需要一个 UserStore。

为什么要用不同的对象来管理用户?好吧,主要原因是您可以决定不使用 EF 并创建自己的用户存储。

当您尝试实现自己的存储提供程序时,事情会变得更加清晰。我做到了,我的代码可以从 github 下载.

这是 UserManager .如您所见,里面没有多少东西。只需几行代码即可配置验证器。

UserStore相反,还是挺大的。在那个例子中,我实现了一些接口(interface)并覆盖了一些方法。如果您想自定义与数据库的交互和/或扩展您的类,这就是您要做的。

您通常不会与 UserStore 交互,事实上它是隐藏的。您只需创建它并将其传递给 UserManager 然后...忘记它。

您始终可以自定义您的 UserManager 并公开 UserStore:

public class UserManager : UserManager<User, int>
{
public UserManager(IUserStore<User, int> store): base(store)
{
this.Store = store;
}

public IUserStore<User, int> Store { get; set; }

}

并且,也许,oververide 一些方法:

public class UserManager : UserManager<User, int>
{
public UserManager(IUserStore<User, int> store): base(store)
{
this.Store = store;
}

public IUserStore<User, int> Store { get; set; }

public override System.Threading.Tasks.Task<IdentityResult> CreateAsync(User user)
{
return base.CreateAsync(user);
}
}

但这将毫无意义,除非您必须进行一些特殊的定制。

假设您想使用商店而不是经理创建用户。你可以这样做:

await this.UserManager.Store.CreateAsync(new Custom.Identity.User() { UserName = "LeftyX" });

它会起作用。

在上面的类中,如您所见,我已经覆盖了 UserManager 中的 CreateAsync
该方法调用 UserStore.CreateAsync(),实际上,您必须调用基本方法 CreateAsync:

public override System.Threading.Tasks.Task<IdentityResult> CreateAsync(User user)
{
return base.CreateAsync(user);
}

如果您不这样做,例如返回 null,则不会调用 UserStore.CreateAsync 并且不会创建用户。

最后说的很有道理。

我想了解此框架如何工作的最佳方法是尝试使用您自己的存储自定义/实现您的解决方案,并查看所有类如何相互交互。

样本project不与数据库交互,但使用 json 存储。调试起来非常容易。试一试,总有一天事情会变得更加清晰。

关于c# - ASP.NET Identity中UserStore和UserManager的使用有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31310042/

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