es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

.NET Core Identity olvidó la contraseña rota

Estoy utilizando Identity con .NET 5. Intenté hacer clic en el enlace de “Olvidó su contraseña” en la página de inicio de sesión. Esto funciona en el sentido de que se envía un correo electrónico con el enlace para restablecer la contraseña.

Sin embargo, hacer clic en el enlace en el correo electrónico conduce a un error relacionado con el código base 64 que está mal formado. Entrada mal formada: 321 es una entrada no válida.

El código base 64 está ahí, pero hay un problema con él. El código base 64 se genera con esto:

var code = await _userManager.GeneratePasswordResetTokenAsync(user);
code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
var callbackUrl = Url.Page(
"/Account/ResetPassword",
pageHandler: null,
values: new { area = "Identity", code },
protocol: Request.Scheme);

        await _emailSender.SendEmailAsync(
            Input.Email,
            "Reset Password",
            $"Please reset your password by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");

Se rompe en ResetPassword.cshtml.cs GET.

if (code == null)
{
return BadRequest("A code must be supplied for password reset.");
}
else
{
Input = new InputModel
{
Code = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(code))
};
return Page();
}

¿Alguien puede señalarme en la dirección correcta para solucionar esto? No estoy seguro de que sea relevante, pero estoy utilizando el servidor SMTP de SendGrid.

ACTUALIZACIÓN. Me di cuenta de que hay una coma invertida al final del código. Eliminar esto soluciona el problema.

code = code.Replace("'", "");

Ahora solo necesito descubrir cómo llegó allí.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema con el código base 64 malformado se debe a una coma invertida al final del código. Esto se puede resolver eliminando la coma invertida con el código code = code.Replace("'", "");.

    Sin embargo, es necesario investigar más a fondo la causa de la coma invertida al final. Puede estar relacionada con la forma en que el remitente de correo electrónico está codificando la URL de retorno o la configuración del servidor SMTP que se está utilizando (SendGrid en este caso). También puede ser un error en el código. Se necesita una depuración e investigación adicionales para determinar la causa raíz de este problema.

Comments are closed.