J'essaie de mettre en œuvre la fonctionnalité de réinitialisation du mot de passe avec la construction nocturne de l'identité ASP.NET 1.1. Il y a une méthode d'Usermanager.getPasswordResetokeSetToke, mais elle jette une exception "Aucun ItokenProvider n'est enregistré". Y a-t-il un fournisseur de jeton intégré à l'identité ASP.NET? Si oui, comment je peux l'enregistrer? Si non, comment je peux en mettre en œuvre un? Sera un fournisseur de jeton par défaut dans le 1.1. Libération? Et la dernière question, existe-t-il une date de sortie estimée 1.1? P>
4 Réponses :
L'implémentation du fournisseur de jeton par défaut se trouve dans le fichier et vous faites quelque chose comme ceci pour filer une manière à l'aide de la valeur par défaut Fournisseur de protection des données de votre Microsoft.Identity.owin code> package:
iAppbuilder code> p>
Merci, semble prometteur. Juste une question: comment puis-je accéder à l'application IAPPBuilder de l'endroit où j'imitive Usermanager (par exemple, de comptesController)?
Quelle construction nocturne est-ce? J'utilise les packages 1.1.0-Alpha1-131024 (PRERELEASE) et je ne vois pas de getdataProtectionProvider code> méthode. S'il y a un fournisseur de jeton par défaut, pourquoi ne pas être le
PasswordSetTokens code> et
USERCONFirmationTokens code> déjà initialisé avec elle afin que nous n'ayons pas à sauter à travers ces cerceaux pour pouvoir utiliser eux? À moins que vous ayez besoin de changer quelque chose sur la manière dont les jetons sont générés, cela devrait «travailler» hors de la boîte sans aucun travail supplémentaire requis ni (pour moi au moins), il n'ya pas vraiment de point dans la création d'un fournisseur par défaut.
Donc, la raison pour laquelle ils ne font pas partie de l'identité.core et vivent en identité.Owin est que le noyau ne peut pas dépendre de Owin, et la mise en œuvre par défaut provient de Owin. GetdataProtectionProvider vit dans microsoft.owin.security.dataproection comme une méthode d'extension off de IAPPBuilder, je crois.
Trouvé la méthode dans l'espace de noms que vous avez spécifié. Je pense toujours que tout cela devrait déjà être initialisé de la boîte. Je ne devrais pas avoir à définir d'entre eux à moins que je ne voulais changer comment fonctionne les fournisseurs de jeton.
Il semble que pour les fonctionnalités de confirmation de compte / Mot de passe oublié dans ASP.NET Identity 2.0 Alpha Vous devez redessiner tout votre code d'initialisation pour Usermanager, etc. Jetez un coup d'oeil dans cet exemple d'application MVC ASPNET.CODEPLEX.COM/SOURCEPONTROL/LATEST Samples-> Identité-> Identité-Passwordpolicy et comparez-le à une application par défaut RTM MVC 5 et vous verra la différence. Il y a une énorme différence dans les éléments d'initialisation (check startup.auth.cs par exemple) et aura un impact important sur n'importe quelle application MVC à l'aide de ASP.NET IDENTITY 1.0 (RTM actuel). Pas si bon!
En général, l'ancien style 1.0 fonctionnera également, nos directives normatifs et nos échantillons par défaut vont simplement faire les choses différemment car certaines des nouvelles fonctionnalités 2.0 nécessitent l'initialisation.
Qu'est-ce que getdataProtectionProvider () code> méthode?
OK, répondant à ma propre question basée sur la réponse @ hao-kung. Premièrement, ajoutez un constructeur statique et usermanagerFactory à la classe de starup (startup.auth.cs) puis init uermanager dans la contrecontroller à l'aide de cette usermanagerFactory P>
Une autre façon de le faire (construire sur les autres réponses mais la simplifiant certains) est de modifier startup.auth.cs code> de sorte qu'il semble similaire à celui-ci:
public AccountController()
: this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())))
{
if (Startup.DataProtectionProvider != null)
{
this.UserManager.PasswordResetTokens = new DataProtectorTokenProvider(Startup.DataProtectionProvider.Create("PasswordReset"));
this.UserManager.UserConfirmationTokens = new DataProtectorTokenProvider(Startup.DataProtectionProvider.Create("ConfirmUser"));
}
}
Si une personne à la recherche d'une solution sous Aspnet.Identity 2.0 version bêta1.
Seulement ceci doit être modifié. p> PasswordSetokens code> et
USERCONFirmationTokens CODE> est fusionné dans
UserStokenProvider CODE> La classe de la propriété et du fournisseur de jetons est également modifié. p> p>
D'où vient DataProtectorProvider?
Il provient de Microsoft.aspnet.Identity.owin code> Espace de noms.
Nope c'est pas là-bas.
Je ne suis pas sûr de quelle version utilisez-vous. Vous pouvez regarder cette classe Link
Comment quelqu'un voudrait-il que la Tokenlifespan soit différente si les jetons de mots de passeResettakens et d'UserConfirmation sont fusionnés dans UserSertennProvider?
Je ne sais pas si cette installation est disponible. CODEPLEX
@jtsan La vie de jeton est une propriété publique pour que vous puissiez la définir avant chaque appel. Nouveau DataProtectortendenProvider