Recientemente actualicé Asp.Net Identity Core
mi formulario de solicitud 1.0 a 2.0.
Hay nuevas funciones que quería probar GenerateEmailConfirmationToken
, etc.
Estoy usando este proyecto como referencia.
Cuando el usuario intenta registrarse, aparece un error durante la ejecución del método de publicación de registro
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);
}
En la linea
var code = _userManager.GenerateEmailConfirmationToken(user.Id);
Me sale un error que dice:
No IUserTokenProvider is registered.
Por ahora, solo quería ver qué tipo de código genera. ¿Hay algún cambio que deba hacer en mi ApplicationUser
clase que herede de la IdentityUser
clase?
¿O hay algo que necesito cambiar para que funcionen esas funciones?
c#
asp.net
asp.net-identity-2
Cybercop
fuente
fuente
Respuestas:
Tienes que especificar un
UserTokenProvider
para generar un token.También debe leer este artículo: Adición de autenticación de dos factores a una aplicación que usa la identidad ASP.NET .
fuente
"Sample"
y"EmailConfirmation"
? algún texto que puede ser cualquier cosa?UserManager
En ASP.NET Core hoy en día es posible configurar un servicio predeterminado en Startup.cs como este:
No es necesario llamar al
DpapiDataProtectionProvider
ni nada por el estilo. DefaultTokenProviders () se encargará de la llamada a GenerateEmailConfirmationToken desde UserManager.fuente
Además de la respuesta aceptada, me gustaría agregar que este enfoque no funcionará en los sitios web de Azure, obtendría CryptographicException en lugar de un token.
Para arreglarlo para Azure, implemente su propio IDataProtector: vea esta respuesta
Un poco más de detalle en la publicación del blog
fuente
Mi solución :
Mi problema con este código resuelto.
Buena suerte amigos.
fuente
En caso de que alguien más cometa el mismo error que yo. Intenté hacer una función como la que se muestra a continuación y, efectivamente, el error "No se ha registrado ningún IUserTokenProvider". se había ido. Sin embargo, tan pronto como traté de usar el enlace generado desde "callbackUrl", recibí el error "Token no válido". Para que funcione, debe obtener HttpContext UserManager. Si está utilizando una aplicación ASP.NET MVC 5 estándar con cuentas de usuario individuales, puede hacerlo como se muestra a continuación.
Código que funciona:
Primero intente que no funciona,
No IUserTokenProvider is registered.
se ha ido pero se obtiene la URL creadaInvalid token.
.fuente
Según pisker arriba
En startup.cs puedes usar
En .net core 2.0, es posible que deba agregar a startup.cs:
Esto funcionó bien para mi.
fuente
Al modificar los archivos de identidad de .NET Core, me encontré con este error:
los
La función no pudo generar un token porque no había ningún proveedor disponible al registrar un nuevo usuario. ¡Sin embargo, este error tiene una solución fácil!
Si eres como yo, cambiaste
AddDefaultIdentity
elStartup.cs
archivo aAddIdentity
. Quería implementar mi propio usuario que heredó del usuario base. Al hacer esto, perdí los proveedores de tokens predeterminados. La solución fue volver a agregarlos conAddDefaultTokenProviders()
.Después de esa solución, ¡todo volvió a funcionar!
fuente: https://mattferderer.com/NotSupportedException-No-IUserTwoFactorTokenProvider-tuser-named-default-registered
fuente
Recibí el mismo error después de actualizar Identity y descubrí que era porque estaba usando Unity.
Vea este hilo de preguntas sobre la solución: Registre IAuthenticationManager con Unity
También a continuación para referencia rápida:
fuente
GeneratePasswordResetToken
- pero obtuve el mismo error de "No hay IUserTokenProvider registrado"). Después de añadircontainer.RegisterType<ApplicationUserManager>( new InjectionFactory(c => HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>()));
aUnityConfig.cs
, funcionó.También puede estar interesado en mirar aquí:
¿Cómo implementar un TokenProvider en la compilación nocturna de ASP.NET Identity 1.1?
para utilizar la implementación del proveedor de tokens predeterminado del paquete Microsoft.Identity.Owin
fuente
en IdentityConfig.cs, agregue su opción de dos factores:
fuente