我在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
构造函数中没有提供者:
答案 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)));
}
}
这解决了这个问题。谢谢你的帮助!