流程
- 用户请求密码重置:用户通过提供他们的电子邮件地址来启动密码重置过程。
- 生成验证码:生成随机的验证码,并与用户的电子邮件地址关联。
- 发送验证邮件:向用户的电子邮件地址发送包含验证码的电子邮件。
- 用户接收邮件:用户接收电子邮件并提取验证码。
步骤
- 编写发送验证码的API端点:创建一个HTTP POST端点,接受包含用户电子邮件地址的JSON对象,并生成随机验证码。
- 发送验证邮件:使用SMTP客户端将包含验证码的电子邮件发送到用户的电子邮件地址。
- 关联验证码和用户:将验证码与用户的电子邮件地址关联,并在一定时间内存储在缓存中,以便后续验证步骤使用。
- 用户验证:在接收到电子邮件后,用户提取验证码并在应用程序中输入以验证身份。
- 验证成功:如果验证码匹配并且在有效时间内被验证,则允许用户继续执行密码重置操作
[HttpPost] public IHttpActionResult SendVerificationCode([FromBody] JObject obj) { dynamic model = obj; string toEmail = model.email; Random random = new Random(); int verificationCode = random.Next(100000, 999999);//验证码 var fromAddress = new MailAddress("发件人邮箱", "发件人名称"); var toAddress = new MailAddress(toEmail, "Recipient Name"); const string fromPassword = "qq邮箱的鉴权码"; const string subject = "重置密码验证码"; string body = $"你的验证码是:{verificationCode}"; HttpContext.Current.Cache.Insert(toEmail, verificationCode, null, DateTime.Now.AddSeconds(3600), System.Web.Caching.Cache.NoSlidingExpiration); var smtp = new SmtpClient { Host = "smtp.qq.com", // QQ 邮箱的 SMTP 服务器地址 Port = 587, EnableSsl = true, DeliveryMethod = SmtpDeliveryMethod.Network, UseDefaultCredentials = false, Credentials = new NetworkCredential(fromAddress.Address, fromPassword) }; using (var message = new MailMessage(fromAddress, toAddress) { Subject = subject, Body = body }) { smtp.Send(message); } return Json(new { success = true, message = "验证码已发送。"}); }