Я сбросил токен пароля:
string resetPasswordToken = await _userManager.GeneratePasswordResetTokenAsync(user);
После того как я перешел на сброс пароля по ссылке электронной почты, я передаю этот токен и электронное письмо для просмотра:
[HttpGet]
public IActionResult ResetPassword([FromQuery] string token, string email)
{
var model = new ResetPasswordViewModel
{
Email = email,
Token = token
};
return View(model);
}
Проблема заключается в том, что япри попытке передать этот токен из представления в контроллер токен обрезается перед символом + или "".Мой взгляд:
<form
method="post" action="reset">
<input name="Email" type="hidden" value=@Model.Email>
<input name="Token" type="hidden" value=@Model.Token/>
<div class="form-group">
<label name="NewPassword" class="control-label">New Password</label>
<input name="NewPassword" class="form-control" />
</div>
<div class="form-group">
<label name="ConfirmNewPassword" class="control-label">Confirm New Password</label>
<input name="ConfirmNewPassword" class="form-control" />
</div>
<div class="form-group">
<input type="submit" value="Save" class="btn btn-success" />
</div>
</form>
POST:
[HttpPost]
[Route("reset")]
public async Task<IActionResult> ResetPassword(ResetPasswordViewModel model)
{
if (!ModelState.IsValid)
return View(model);
var user = await _userManager.FindByEmailAsync(model.Email);
if (user == null)
return RedirectToAction("ResetPasswordConfirm");
var result = await _userManager.ResetPasswordAsync(
user, model.Token, model.NewPassword);
if (result.Succeeded)
return RedirectToAction("ResetPasswordConfirm");
foreach (var error in result.Errors)
ModelState.AddModelError(string.Empty, error.Description);
return View(model);
}
Токен:
CfDJ8IgVu4V4NxlJoKOV2esH3C3b0PdYklCHqKIB5Qsh0bvnrX4AXaDWgnpJbwCRupsVEKuOYxPctOSe7VqQe+VMzEQna/oNfdB9G3NWxq05wnuLfERKVFiMXMaodDsMV9G6b+J7fJCv8i1QmzR6X/vg/fDNkhmm37m1rJf0TZ41LEiBgthYS9RC/Cg785SaBN0O3VbO+nW/9WRZU1DzIU/ik2/CgkW1gqu9/FszQxVy0GtC
Токен после обрезки:
CfDJ8IgVu4V4NxlJoKOV2esH3C3b0PdYklCHqKIB5Qsh0bvnrX4AXaDWgnpJbwCRupsVEKuOYxPctOSe7VqQe