I have this method:
public async Task<string> Handle(GenerateRecoveryLinkQuery request, CancellationToken cancellationToken){
var user = await _userManager.FindByNameAsync(request.Username);
if (user == null)
{
throw new Exception("User not found.");
}
var token = await _userManager.GeneratePasswordResetTokenAsync(user);
var resetUrl = $"{baseUrl}/Auth/ResetPassword?user={request.Username}&code={HttpUtility.UrlEncode(token)}";
var save = new RecoveryLink();
save.Username = request.Username;
save.Link = resetUrl;
await DB.SaveAsync(save);
return resetUrl;
}
View to handle password reset:
[HttpGet("Auth/ResetPassword")]
public IActionResult ResetPassword(string user, string code)
{
ViewBag.Username = user;
ViewBag.Code = code;
return View("ResetPassword");
}
And handler to reset password:
public async Task<String> Handle(ResetPasswordQuery request, CancellationToken cancellationToken)
{
var user = await _userManager.FindByNameAsync(request.Username);
if (user == null)
{
throw new Exception("User not found.");
}
var reset = await _userManager.ResetPasswordAsync(user, request.Token, request.newPassword);
if (reset.Succeeded)
{
return "Success";
}
var error = reset.Errors.Select(x=>x.Description).ToArray();
throw new Exception (error[0]);
}
When i tried to go throw link and setting new password, it says invalid password. But when i pass that exactly code in postman, it will succeeded. I tried HttpUtility.UrlEncode(token) and HttpUtility.UrlDecode(request.Token), but still got same error.