gpt4 book ai didi

ASP.NET Core 身份 - UserManager 和 UserStore 问题

转载 作者:行者123 更新时间:2023-12-04 08:51:37 26 4
gpt4 key购买 nike

我正在尝试在 ASP.NET Core 中实现身份系统应用程序(RC2 库)并且有一个特殊的挂断让我发疯。

首先我是不是 使用 Entity Framework 。我什至没有使用 SQL。我正在备份到 乌鸦数据库 ,所以我需要实现非常具体;这不是问题。

所以我设计了一个RavenUserStore类,它看起来像这样;

public class RavenUserStore<TUser> :
IUserStore<TUser>,
IUserLoginStore<TUser>,
IUserPasswordStore<TUser>,
IUserRoleStore<TUser>,
IUserSecurityStampStore<TUser>,
IUserClaimStore<TUser>,
IUserLockoutStore<TUser>,
IUserTwoFactorStore<TUser>,
IUserEmailStore<TUser> {
// ...
}

单独使用效果很好。我已经实现了所有的方法,等等。太棒了。非常干净和高效。

现在,我转到我的 Web 应用程序并连接起来;
services.AddTransient<ILookupNormalizer>(s => new LowerInvariantLookupNormalizer());
services.AddTransient<IPasswordHasher<Member>>(s => new PasswordHasher<Member>());
services.AddTransient<IUserStore<Member>, RavenUserStore<Member>>();
services.AddIdentity<Member, Role>(o => {
o.Password.RequiredLength = 6;
o.Password.RequireDigit = true;
o.Password.RequireLowercase = false;
o.Password.RequireUppercase = false;
})
.AddUserStore<RavenUserStore<Member>>()
.AddRoleStore<RavenRoleStore<Role>>();

所以我去制作一个 Controller 来使用它,根据我见过的所有样本,以及来自 Identity Framework Github Repository 的最核心样本
//... [PROPERTIES]...//
public AccountController(UserManager<Member> userManager, SignInManager<Member> signInManager) {
// ... [attach constructor parameters to properties] ...//
}

好的,所以我仔细检查类(class)。
UserManager<T>有房产 Store ,这是 IUserStore<T>的一种.

所以理论上.. 如果依赖注入(inject)解析 IUserStore<T> 的类型至 RavenUserStore<T>当它们通过构造函数注入(inject)时.. 这不应该意味着 UserManager<T>获得 RavenUserStore<T>作为其 Store 属性?

我也认为会的;但是当我在 UserManager 上调用方法时, 它 调用我的 RavenUserStore .为什么是这样?我能做些什么?

我真的需要定制 UserManager吗?类并再次执行所有这些方法?

最佳答案

在调用 services.AddIdentity() 之前,您需要添加自己的自定义提供程序.在内部,AddIdentity使用 TryAddScoped()如果它们在服务容器中尚不存在,则仅添加默认项。

所以只需调用AddIdentity()在您注册所有自定义实现之后,应该意味着它们将按照您的预期优先。

关于ASP.NET Core 身份 - UserManager 和 UserStore 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36522234/

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