2016-11-06 68 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));