我正在为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/

10-10 15:35