Мы пытаемся использовать UserManager
, чтобы сгенерировать PasswordResetToken
и проверить его, прежде чем действительно сбросить пароль.
Первый метод отвечает за генерацию токена, который затем отправлено пользователю через ссылку для сброса пароля.
Генерация токена работает нормально, и после проверки его, VerifyUserTokenAsync
возвращает true (строка: //var result = await this.userManager.VerifyUserTokenAsync(user, TokenOptions.DefaultProvider, UserManager<User>.ResetPasswordTokenPurpose, token);
Второй способ - сброс пароль. Мы не используем UserManager.ResetPassword
, потому что наш пользователь не имеет всех обязательных полей. При вызове VerfiyUserTokenAsync
в этом методе if возвращает false
, даже если предоставленный токен точно такой же, как в первом метод.
Мы не можем понять, почему он работает в первом методе, но не работает во втором ...
Любая подсказка будет высоко оценена.
Спасибо за аванс
[HttpPost("generatepasswordresettoken")]
[ProducesResponseType(StatusCodes.Status201Created)]
public async Task<IActionResult> GeneratePasswordResetToken([FromBody] ResetPasswordTokenRequest resetPasswordTokenRequest)
{
var user = await this.userService.GetAsync(resetPasswordTokenRequest.Email);
var token = await this.userManager.GeneratePasswordResetTokenAsync(user);
//var result = await this.userManager.VerifyUserTokenAsync(user, TokenOptions.DefaultProvider, UserManager<User>.ResetPasswordTokenPurpose, token);
return this.Ok(new GenerateResetPasswordTokeResponse {ResetPasswordToken = token, Email = resetPasswordTokenRequest.Email});
}
[HttpPut("resetpassword")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<IActionResult> ResetPassword([FromBody] ResetPasswordRequest resetPasswordRequest)
{
var user = await this.userService.GetAsync(resetPasswordRequest.Email);
if (await this.userManager.VerifyUserTokenAsync(user, TokenOptions.DefaultProvider, UserManager<User>.ResetPasswordTokenPurpose, resetPasswordRequest.ResetPasswordToken)) {
var resetPasswordDomainModel = this.resetPasswordMapper.Map(resetPasswordRequest);
if (await this.userService.ResetPasswordAsync(resetPasswordDomainModel)) {
return this.Ok();
}
}
return this.BadRequest("Couldn't reset password");
}