2016-11-06 28 views
1

你好,密码重置ASP.NET核心令牌提供商 - IUserTokenProvider没有找到

我彻底地用Google搜索,但没有从ASP.NET,但没有关于ASP.NET核心上百栋。

为了获得密码重置工作,我需要注册一个IUserTokenProvider实例到DI中。

var result = await _userManager.ResetPasswordAsync(user, token, password); 

异常

"No IUserTokenProvider named 'PasswordResetTokenProvider' is registered." 

这是有道理的,所以我试图在DI进行注册:

services.AddSingleton<IUserTokenProvider<User>, DataProtectorTokenProvider<User>>(); 

没有它,我在下面的行获得异常界面IUserTokenProvider不存在。我在档案中使用Microsoft.AspNetCore.Identity。它甚至不存在于项目gitlab中。

那么,在挖掘身份源代码后,我发现一个类似的接口IUserTwoFactorTokenProvider<T>。让我们用这个代替:

services.AddSingleton<IUserTwoFactorTokenProvider<User>, DataProtectorTokenProvider<User>>(); 

...并且没有运气。


TL; DR:

请 - 如何让ASP.NET 核心工作重置密码?充其量就是一些例子。

预先感谢您。

回答

2

我不确定它是解决方法还是常规方法,但IUserTwoFactorTokenProvider界面似乎是正确的。 IUserTokenProvider似乎不再存在。

想通了,我必须手动注册商的身份:

services.AddIdentity<User, Role>(options => 
      { 
       ... 
       options.Tokens.ProviderMap.Add("Default", new TokenProviderDescriptor(typeof(IUserTwoFactorTokenProvider<User>))); 
      }) 

和可选配置ConfigureServices

services.Configure<DataProtectionTokenProviderOptions>(o => 
     { 
      o.Name = "Default"; 
      o.TokenLifespan = TimeSpan.FromHours(1); 
     }); 

,密码重置/电子邮件验证令牌现在的工作。

PS:Opened an issue for clarification

0

您可以指定一个内置的提供者;

services.AddIdentity<User, Role>(options =>{ 
     options.Tokens.PasswordResetTokenProvider = TokenOptions.DefaultEmailProvider; 
    }) 
    .AddDefaultTokenProviders(); 

或创建您自己的IUserTwoFactorTokenProvider并注册它是这样的;

services.AddIdentity<User, Role>(options => { 
    options.Tokens.PasswordResetTokenProvider = nameof(MyTokenProvider); 
}) 
.AddTokenProvider<MyTokenProvider>(nameof(MyTokenProvider));