【发布时间】:2020-02-10 13:38:40
【问题描述】:
我正在通过发送一封带有 asp.net 核心身份 3 的重置链接的电子邮件来设置密码重置功能。
我的第一篇文章生成令牌和电子邮件正文并发送电子邮件。
1 [HttpPost("requestPasswordReset")]
2 [AllowAnonymous]
3 public async Task<IActionResult> requestPasswordReset(PasswordResetRequestDto passwordResetRequestDto)
4 {
5 var user = await _userManager.FindByNameAsync(passwordResetRequestDto.Username);
6
7 if (user == null)
8 return Unauthorized();
9
10 var code = await _userManager.GeneratePasswordResetTokenAsync(user);
11 code = System.Web.HttpUtility.UrlEncode(code);
12
13 // For test purpose: this works
14 var decodedCode = System.Web.HttpUtility.UrlDecode(code);
15 IdentityResult passwordChangeResult = await _userManager.ResetPasswordAsync(user, decodedCode, "password");
16 // End For test purpose
17
18 passwordResetRequestDto.EmailToSend.HtmlPart = passwordResetRequestDto.EmailToSend.HtmlPart.Replace("[resetLink]", passwordResetRequestDto.SpaUrl + "?token=" + code);
19
20 var jsonEmailToSend = JsonConvert.SerializeObject(passwordResetRequestDto.EmailToSend);
21 var data = new StringContent(jsonEmailToSend, Encoding.UTF8, "application/json");
22
23 var client = new HttpClient();
24
25 client.BaseAddress = new Uri(_config.GetSection("AppSettings:ApiUrl").Value + "email/sendmail");
26 var postEmail = client.PostAsync(client.BaseAddress, data);
27
28 return Ok();
29 }
第 13 到 20 行仅用于测试,以检查令牌是否可用于重置密码。 第 18 行构建到 Angular 客户端 SPA 的重置链接。
在SPA中输入新密码并发送到下一个帖子重置密码
1 [HttpPost("resetPassword")]
2 [AllowAnonymous]
3 public async Task<IActionResult> resetPassword(UserDto userDto)
4 {
5 var user = await _userManager.FindByNameAsync(userDto.Username);
6 var password = userDto.Password;
7 var token = userDto.Token;
8 token = System.Web.HttpUtility.UrlDecode(token);
9
10 IdentityResult passwordChangeResult = await _userManager.ResetPasswordAsync(user, token, userDto.Password);
11
12 if (passwordChangeResult.Succeeded)
13 return Ok();
14
15 return BadRequest();
16 }
第 10 行返回“无效令牌” 我已经检查了这一行中的令牌是否与生成的相同 var code = await _userManager.GeneratePasswordResetTokenAsync(user); 在第一篇文章中。
有人可以帮忙吗?
【问题讨论】:
标签: token asp.net-identity-3 reset-password