根据GitHub发布的实施情况,我制作了自己的 UserStore 和 RoleStore ,它们不使用实体框架< / strong>(在连接到真实数据库之前,我目前只需要一个简单的内存用户列表)。为了能够做到这一点,我不得不改变注册。我编写了自己的IdentityEntityFrameworkBuilderExtensions没有DbContext和TryAddSingleton而不是TryAddScoped,所以一旦初始化用户列表可以持续应用程序生命周期。问题是,Dispose方法被调用了很多次......我没有处理任何东西,但是有很多调用。是因为我制作了 UserStore 和 RoleStore 单身,即使其他所有内容都是有效的吗?
第二件事是,完成工作 UserStore 的最低要求是什么?
danludwig wrote你只需要 IUserStore 和 IUserPasswordStore ,这很可能,因为我做了一个实现这两个接口的商店和一个 RoleStore < / strong>使用 IRoleStore ,它似乎工作。由于启动类中的services.AddIdentity<ApplicationUser, IdentityRole>()
部分,我也做了 RoleStore 。我为 ASP.NET核心Web应用程序(使用个人用户帐户)使用实体框架授权模板。
Arve Systad and Anderson Matos写道,你需要那些8:
IUserStore<TUser>
IUserPasswordStore<TUser>
IUserTwoFactorStore<TUser>
IUserClaimStore<TUser>
IRoleStore<TRole>
IUserSecurityStampStore<TUser, string>
IUserRoleStore<TUser, string>
UserManager<TUser>
删除所有 Entity Framework 包后,我了解到它只提供 UserStore 和 RoleStore 实现(基于来自GitHub的源代码:
和
删除软件包后,我尝试为 Entity Framework 身份验证模板执行最小方案 UserStore 和 RoleStore ,然后我得:
可能只有IRoleStore,因为只调用Dispose方法。大多数接口在应用程序生命周期内仅提供Get ....在添加用户时,我会收到一些名单,但它们来自 IQueryableUserStore , IUserPasswordStore , IUserSecurityStampStore 和 IUserLockoutStore 。我真的需要所有这些接口吗?
修改
我目前的后EF UserStore 看起来像是这样,只实现了提到的方法:
public class MyUserStore<TUser> :
IQueryableUserStore<TUser>,
IUserPasswordStore<TUser>,
IUserSecurityStampStore<TUser>
where TUser : MyIdentity
{
private List<TUser> _identities = new List<TUser>();
CreateAsync(...)
FindByIdAsync(...)
FindByNameAsync(...)
GetPasswordHashAsync(...)
GetSecurityStampAsync(...)
GetUserIdAsync(...)
GetUserNameAsync(...)
SetNormalizedUserNameAsync(...)
SetPasswordHashAsync(...)
SetSecurityStampAsync(...)
}
我想问的最后一件事是 UserStore 中setter方法的目的。他们主要在身份中设置一些额外的属性:
public async Task SetNormalizedUserNameAsync(TUser user, string normalizedName, CancellationToken cancellationToken)
{
cancellationToken.ThrowIfCancellationRequested();
ThrowIfDisposed();
if (user == null)
{
throw new ArgumentNullException("user");
}
user.NormalizedUserName = normalizedName;
await UpdateAsync(user, cancellationToken);
}
为什么呢?这是某种数据库边验证的一步吗?当您在添加新用户时检查应用程序所经历的路径并且它从 SetPasswordHashAsync 开始并以 CreateAsync 结束时...:P,这有点奇怪