Ich habe kürzlich Asp.Net Identity Core
mein Antragsformular 1.0 auf 2.0 aktualisiert .
Es gibt neue Funktionen, die ich ausprobieren wollte GenerateEmailConfirmationToken
, usw.
Ich benutze dieses Projekt als Referenz.
Wenn der Benutzer versucht, sich zu registrieren, wird während der Ausführung der Post-Registrierungsmethode ein Fehler angezeigt
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);
}
In der Schlange
var code = _userManager.GenerateEmailConfirmationToken(user.Id);
Ich erhalte die Fehlermeldung:
No IUserTokenProvider is registered.
Im Moment wollte ich nur sehen, welche Art von Code generiert wird. Muss ich einige Änderungen an meiner ApplicationUser
Klasse vornehmen , die von der IdentityUser
Klasse erbt ?
Oder muss ich etwas ändern, damit diese Funktion funktioniert?
c#
asp.net
asp.net-identity-2
Cybercop
quelle
quelle
Antworten:
Sie müssen a angeben
UserTokenProvider
, um ein Token zu generieren.Sie sollten auch diesen Artikel lesen: Hinzufügen einer Zwei-Faktor-Authentifizierung zu einer Anwendung mit ASP.NET-Identität .
quelle
"Sample"
und"EmailConfirmation"
? irgendein Text, der alles sein kann?UserManager
In ASP.NET Core ist es heutzutage möglich, einen Standarddienst in Startup.cs wie folgt zu konfigurieren:
Es besteht keine Notwendigkeit, das
DpapiDataProtectionProvider
oder so etwas anzurufen . Die DefaultTokenProviders () kümmern sich um den Aufruf von GenerateEmailConfirmationToken aus dem UserManager.quelle
Zusätzlich zu der akzeptierten Antwort möchte ich hinzufügen, dass dieser Ansatz auf Azure-Websites nicht funktioniert. Sie erhalten CryptographicException anstelle eines Tokens.
Implementieren Sie Ihren eigenen IDataProtector, um das Problem für Azure zu beheben. Siehe diese Antwort
Etwas mehr Details im Blog-Beitrag
quelle
Meine Lösung :
Mein Problem mit diesem Code wurde gelöst.
Viel Glück Freunde.
quelle
Für den Fall, dass jemand den gleichen Fehler macht wie ich. Ich habe versucht, eine Funktion wie die folgende zu erstellen, und zwar den Fehler "Kein IUserTokenProvider ist registriert." war weg. Sobald ich jedoch versuchte, den von "callbackUrl" generierten Link zu verwenden, wurde der Fehler "Ungültiges Token" angezeigt. Damit es funktioniert, müssen Sie den HttpContext UserManager herunterladen. Wenn Sie eine Standardanwendung von ASP.NET MVC 5 mit einzelnen Benutzerkonten verwenden, können Sie dies wie folgt tun.
Code, der funktioniert:
Erster Versuch, der nicht funktioniert,
No IUserTokenProvider is registered.
ist weg, aber die erstellte URL wird abgerufenInvalid token.
.quelle
Wie oben beschrieben
In startup.cs können Sie verwenden
In .net Core 2.0 müssen Sie möglicherweise die Datei startup.cs hinzufügen:
Das hat bei mir gut funktioniert.
quelle
Beim Ändern der Identitätsdateien von .NET Core bin ich auf diesen Fehler gestoßen:
Das
Die Funktion konnte kein Token generieren, da bei der Registrierung eines neuen Benutzers kein Anbieter verfügbar war. Dieser Fehler lässt sich jedoch leicht beheben!
Wenn Sie wie ich sind, haben Sie
AddDefaultIdentity
in derStartup.cs
Datei zu geändertAddIdentity
. Ich wollte meinen eigenen Benutzer implementieren, der vom Basisbenutzer geerbt hat. Dadurch habe ich die Standard-Token-Anbieter verloren. Die Lösung bestand darin, sie wieder hinzuzufügenAddDefaultTokenProviders()
.Nach diesem Fix hat alles wieder funktioniert!
Quelle: https://mattferderer.com/NotSupportedException-No-IUserTwoFactorTokenProvider-tuser-named-default-registered
quelle
Ich habe nach dem Aktualisieren von Identity den gleichen Fehler erhalten und festgestellt, dass ich Unity verwendet habe.
Weitere Informationen finden Sie in diesem Fragethread zur Lösung: Registrieren Sie IAuthenticationManager bei Unity
Auch unten als Kurzreferenz:
quelle
GeneratePasswordResetToken
- aber es wurde der gleiche Fehler "Kein IUserTokenProvider ist registriert" angezeigt). Nach dem Hinzufügencontainer.RegisterType<ApplicationUserManager>( new InjectionFactory(c => HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>()));
zuUnityConfig.cs
hat es funktioniert.Möglicherweise möchten Sie auch hier nachsehen:
Wie implementiere ich einen TokenProvider in ASP.NET Identity 1.1?
Verwenden der Standard-Token-Provider-Implementierung aus dem Microsoft.Identity.Owin-Paket
quelle
Fügen Sie in IdentityConfig.cs Ihre Option für zwei Faktoren hinzu:
quelle