我正在为IUserStore编写自定义实现。 create方法的签名为:
public async virtual Task CreateAsync(TUser user)
考虑到Microsoft.AspNet.Identity中的核心接口(interface)IUserStore是有意义的(是相同的)。
但是,Microsoft.AspNet.Identity中定义的UserManager类的接口(interface)是:
public virtual Task<IdentityResult> CreateAsync(TUser user);
我的问题是我看不到应该如何将此IdentityResult传递给UserManager,因为存储中的返回类型只是“任务”。我有一个自定义逻辑来确定是否可以创建用户,因此我确实需要将CreateAsync的结果告知UserManager。
任何想法 ?
最佳答案
查看source code for UserManager.CreateAsync
(这是针对Identity 2.0的),您可以看到在调用IUserStore.CreateAsync
之前,它对IIdentityValidator<TUser>.ValidateAsync
进行了调用,该调用实际上负责返回相关的IdentityResult
对象:
public virtual async Task<IdentityResult> CreateAsync(TUser user)
{
ThrowIfDisposed();
await UpdateSecurityStampInternal(user).ConfigureAwait(false);
var result = await UserValidator.ValidateAsync(user).ConfigureAwait(false);
if (!result.Succeeded)
{
return result;
}
if (UserLockoutEnabledByDefault && SupportsUserLockout)
{
await GetUserLockoutStore().SetLockoutEnabledAsync(user, true).ConfigureAwait(false);
}
await Store.CreateAsync(user).ConfigureAwait(false);
return IdentityResult.Success;
}
IUserStore.CreateAsync
的主要目的是调用保存数据的基础数据源。看来您实际上是想实现IIdentityValidator<TUser>
并将其设置在UserManager
实例上。关于c# - IUserStore <TUser> .CreateAsync : how to indicate failure in custom implementation?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32927571/