ASP.NET标识 - 无法注册UserTokenProvider

时间:2017-03-28 12:19:22

标签: c# nhibernate asp.net-core asp.net-core-identity

我在ASP.NET Core 1.0项目中生成重置密码令牌时遇到问题:

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddIdentity<UserDB, GroupDB>()
            .AddDefaultTokenProviders()
}

然后在我的控制器中使用DI:

...
UserManager<UserDB> userManager
...


string token = await userManager.GeneratePasswordResetTokenAsync(user);

我得到了

  

没有注册名为“默认”的IUserTokenProvider。

如何解决?

我可以看到我的UserStore构造函数中没有提供者:

enter image description here

1 个答案:

答案 0 :(得分:1)

我注意到UserStore类没有IUserTokenProvider接口实现。此外,在ApplicationUserManager类构造函数中,我检查TokenProviderDescriptor是否已注册

public class ApplicationUserManager : UserManager<UserDB>
{
    public ApplicationUserManager(UserStore store, IOptions<IdentityOptions> optionsAccessor, IPasswordHasher<UserDB> passwordHasher, IEnumerable<IUserValidator<UserDB>> userValidators, IEnumerable<IPasswordValidator<UserDB>> passwordValidators, ILookupNormalizer keyNormalizer, IdentityErrorDescriber errors, IServiceProvider services, ILogger<UserManager<UserDB>> logger, IHttpContextAccessor contextAccessor) 
        : base(store, optionsAccessor, passwordHasher, userValidators, passwordValidators, keyNormalizer, errors, services, logger, contextAccessor)
    {
        if (!optionsAccessor.Value.Tokens.ProviderMap.ContainsKey("DefaultTokenProvider"))
            optionsAccessor.Value.Tokens.ProviderMap.Add("DefaultTokenProvider", new TokenProviderDescriptor(typeof(UserStore)));
    }
}

这解决了这个问题。谢谢你的帮助!