2017-03-28 1 views
3

J'ai un problème avec la génération du jeton de mot de passe de réinitialisation dans le projet de base ASP.NET 1.0:ASP.NET Identity - ne peut pas enregistrer UserTokenProvider

Startup.cs

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

puis dans mon contrôleur avec DI:

... 
UserManager<UserDB> userManager 
... 


string token = await userManager.GeneratePasswordResetTokenAsync(user); 

et je reçois

Aucun IUserTokenProvider nommé 'Default' n'est enregistré.

Comment le réparer?

Je peux voir il n'y a pas de fournisseurs à l'intérieur de mon constructeur UserStore:

enter image description here

Répondre

1

J'ai remarqué que la classe UserStore n'a pas eu la mise en œuvre de l'interface IUserTokenProvider. En outre, dans le constructeur de la classe ApplicationUserManager, je vérifie si le TokenProviderDescriptor est enregistré

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))); 
    } 
} 

C'est résolu la question. Merci pour l'aide !