Niedawno zaktualizowałem Asp.Net Identity Core
mój formularz zgłoszeniowy z 1.0 do 2.0.
Są nowe funkcje, które chciałem wypróbować GenerateEmailConfirmationToken
itp.
Używam tego projektu jako odniesienia.
Kiedy użytkownik próbuje się zarejestrować, pojawia się błąd podczas wykonywania metody Register w Post
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);
}
W linii
var code = _userManager.GenerateEmailConfirmationToken(user.Id);
Pojawia się błąd mówiący:
No IUserTokenProvider is registered.
Na razie chciałem tylko zobaczyć, jaki kod generuje. Czy jest jakaś zmiana, którą muszę wprowadzić w mojej ApplicationUser
klasie, która dziedziczy po IdentityUser
klasie?
Czy jest coś, co muszę zmienić, aby te funkcje działały?
c#
asp.net
asp.net-identity-2
Cybercop
źródło
źródło
Odpowiedzi:
Musisz określić,
UserTokenProvider
aby wygenerować token.Należy również przeczytać ten artykuł: Dodawanie uwierzytelniania dwuskładnikowego do aplikacji przy użyciu tożsamości ASP.NET .
źródło
"Sample"
i"EmailConfirmation"
? jakiś tekst, który może być cokolwiek?UserManager
W ASP.NET Core można obecnie skonfigurować domyślną usługę w Startup.cs w następujący sposób:
Nie ma potrzeby dzwonić do niego
DpapiDataProtectionProvider
ani nic takiego. DefaultTokenProviders () zajmie się wywołaniem GenerateEmailConfirmationToken z UserManager.źródło
Oprócz zaakceptowanej odpowiedzi chciałbym dodać, że to podejście nie zadziała w Azure Web-Sites, otrzymasz CryptographicException zamiast tokenu.
Aby rozwiązać ten problem na platformie Azure, zaimplementuj własny IDataProtector: zobacz tę odpowiedź
Nieco więcej szczegółów w poście na blogu
źródło
Moje rozwiązanie:
Mój problem z tym kodem rozwiązany.
Powodzenia przyjaciele.
źródło
Na wypadek, gdyby ktoś inny popełnił ten sam błąd co ja. Próbowałem utworzyć funkcję taką jak ta poniżej i na pewno błąd „Nie zarejestrowano IUserTokenProvider”. zniknął. Jednak gdy tylko próbowałem użyć linku wygenerowanego z „callbackUrl”, pojawił się błąd „Nieprawidłowy token”. Aby to działało, musisz pobrać HttpContext UserManager. Jeśli używasz standardowej aplikacji ASP.NET MVC 5 z indywidualnymi kontami użytkowników, możesz to zrobić jak poniżej.
Kod, który działa:
Pierwsza próba nie działa,
No IUserTokenProvider is registered.
zniknęła, ale utworzony adres URL dostajeInvalid token.
.źródło
Jak na piskera powyżej
W startup.cs możesz użyć
W .net core 2.0 może być konieczne dodanie do startup.cs:
To działało dobrze dla mnie.
źródło
Podczas modyfikowania plików tożsamości .NET Core natknąłem się na ten błąd:
Plik
funkcja nie mogła wygenerować tokena, ponieważ żaden dostawca nie był dostępny podczas rejestracji nowego użytkownika. Ten błąd można jednak łatwo naprawić!
Jeśli jesteś podobny do mnie, zmieniłeś
AddDefaultIdentity
wStartup.cs
pliku naAddIdentity
. Chciałem zaimplementować własnego użytkownika, który odziedziczył po użytkowniku podstawowym. W ten sposób straciłem domyślnych dostawców tokenów. Rozwiązaniem było dodanie ich z powrotem za pomocąAddDefaultTokenProviders()
.Po tej poprawce wszystko znów działało!
źródło: https://mattferderer.com/NotSupportedException-No-IUserTwoFactorTokenProvider-tuser-named-default-registered
źródło
Po zaktualizowaniu tożsamości wystąpił ten sam błąd i stwierdziłem, że jest to spowodowane korzystaniem z aparatu Unity.
Zobacz ten wątek pytania na temat rozwiązania: Zarejestruj IAuthenticationManager w Unity
Również poniżej dla szybkiego odniesienia:
źródło
GeneratePasswordResetToken
- ale otrzymałem ten sam błąd „Nie zarejestrowano IUserTokenProvider”). Po dodaniucontainer.RegisterType<ApplicationUserManager>( new InjectionFactory(c => HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>()));
doUnityConfig.cs
, to działało.Możesz być również zainteresowany
zajrzeniem tutaj: Jak zaimplementować dostawcę TokenProvider w kompilacji nocnej ASP.NET Identity 1.1?
aby użyć domyślnej implementacji dostawcy tokenów z pakietu Microsoft.Identity.Owin
źródło
w IdentityConfig.cs, dodaj opcję dwuskładnikową:
źródło