J'ai récemment mis à jour Asp.Net Identity Core
mon formulaire de candidature 1.0 à 2.0.
Il y a de nouvelles fonctionnalités que je voulais essayer GenerateEmailConfirmationToken
, etc.
J'utilise ça projet comme référence.
Lorsque l'utilisateur tente de s'inscrire, j'obtiens une erreur lors de l'exécution de la méthode Post de Register
private readonly UserManager<ApplicationUser> _userManager;
public ActionResult Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var ifUserEXists = _userManager.FindByName(model.EmailId);
if (ifUserEXists == null) return View(model);
var confirmationToken = _userRepository.CreateConfirmationToken();//this is how i'm generating token currently.
var result = _userRepository.CreateUser(model,confirmationToken);
var user = _userManager.FindByName(model.EmailId);
if (result)
{
var code = _userManager.GenerateEmailConfirmationToken(user.Id);//error here
_userRepository.SendEmailConfirmation(model.EmailId, model.FirstName, confirmationToken);
//Information("An email is sent to your email address. Please follow the link to activate your account.");
return View("~/Views/Account/Thank_You_For_Registering.cshtml");
}
}
//Error("Sorry! email address already exists. Please try again with different email id.");
ModelState.AddModelError(string.Empty, Resource.AccountController_Register_Sorry__User_already_exists__please_try_again_);
return View(model);
}
Dans la ligne
var code = _userManager.GenerateEmailConfirmationToken(user.Id);
Je reçois une erreur en disant:
No IUserTokenProvider is registered.
Pour l'instant, je voulais juste voir quel type de code cela génère. Y a-t-il un changement que je dois apporter à ma ApplicationUser
classe qui hérite deIdentityUser
classe?
Ou dois-je changer quelque chose pour que ces fonctions fonctionnent?
c#
asp.net
asp.net-identity-2
Cybercop
la source
la source
Réponses:
Vous devez spécifier a
UserTokenProvider
pour générer un jeton.Vous devez également lire cet article: Ajout de l'authentification à deux facteurs à une application utilisant l'identité ASP.NET .
la source
"Sample"
et"EmailConfirmation"
? un texte qui peut être n'importe quoi?UserManager
Dans ASP.NET Core, il est désormais possible de configurer un service par défaut dans Startup.cs comme ceci:
Il n'est pas nécessaire d'appeler le
DpapiDataProtectionProvider
ou quelque chose comme ça. DefaultTokenProviders () s'occupera de l'appel à GenerateEmailConfirmationToken depuis le UserManager.la source
En plus de la réponse acceptée, j'aimerais ajouter que cette approche ne fonctionnera pas dans les sites Web Azure, vous obtiendrez CryptographicException au lieu d'un jeton.
Pour le résoudre pour Azure, implémentez votre propre IDataProtector: voir cette réponse
Un peu plus de détails dans l' article de blog
la source
Ma solution:
Mon problème avec ce code est résolu.
Bonne chance les amis.
la source
Au cas où quelqu'un d'autre ferait la même erreur que moi. J'ai essayé de créer une fonction comme celle ci-dessous et bien sûr l'erreur "Aucun IUserTokenProvider n'est enregistré." était parti. Cependant, dès que j'ai essayé d'utiliser le lien généré à partir de "callbackUrl", j'ai eu l'erreur "Jeton non valide". Pour que cela fonctionne, vous devez obtenir le UserManager HttpContext. Si vous utilisez une application ASP.NET MVC 5 standard avec des comptes d'utilisateurs individuels, vous pouvez le faire comme ci-dessous.
Code qui fonctionne:
Premier essai qui ne fonctionne pas,
No IUserTokenProvider is registered.
est parti mais l'URL créée obtientInvalid token.
.la source
Selon pisker ci-dessus
Dans startup.cs, vous pouvez utiliser
Dans .net core 2.0, vous devrez peut-être ajouter à startup.cs:
CA marchait bien pour moi.
la source
Lors de la modification des fichiers d'identité de .NET Core, je suis tombé sur cette erreur:
le
n'a pas pu générer de jeton car aucun fournisseur n'était disponible lors de l'enregistrement d'un nouvel utilisateur. Cette erreur a cependant une solution facile!
Si vous êtes comme moi, vous avez changé
AddDefaultIdentity
leStartup.cs
fichier enAddIdentity
. Je voulais implémenter mon propre utilisateur hérité de l'utilisateur de base. En faisant cela, j'ai perdu les fournisseurs de jetons par défaut. Le correctif était de les rajouter avecAddDefaultTokenProviders()
.Après ce correctif, tout a fonctionné à nouveau!
source: https://mattferderer.com/NotSupportedException-No-IUserTwoFactorTokenProvider-tuser-named-default-registered
la source
J'ai eu la même erreur après la mise à jour d'Identity et j'ai constaté que c'était parce que j'utilisais Unity.
Voir ce fil de question sur la solution: Enregistrer IAuthenticationManager avec Unity
Aussi ci-dessous pour une référence rapide:
la source
GeneratePasswordResetToken
- mais j'ai eu la même erreur de "Aucun IUserTokenProvider n'est enregistré"). Après avoir ajoutécontainer.RegisterType<ApplicationUserManager>( new InjectionFactory(c => HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>()));
àUnityConfig.cs
, cela a fonctionné.Vous pouvez également intrested à regarder ici:
Comment mettre en œuvre une TokenProvider dans ASP.NET Identity 1.1 nightly build?
pour utiliser l'implémentation du fournisseur de jetons par défaut du package Microsoft.Identity.Owin
la source
dans IdentityConfig.cs, ajoutez votre option à deux facteurs:
la source