fix: continue password reset after email request

This commit is contained in:
2026-08-04 18:29:02 +08:00
parent 87c792db44
commit 540b8e0932
2 changed files with 8 additions and 1 deletions
+7 -1
View File
@@ -452,7 +452,13 @@ def forgot_password():
email = normal_email(request.form.get("email", "")); user = User.query.filter_by(email=email, is_active_account=True).first() email = normal_email(request.form.get("email", "")); user = User.query.filter_by(email=email, is_active_account=True).first()
if user: if user:
session.update(pending_email=email, pending_user_id=user.id, pending_purpose="reset") session.update(pending_email=email, pending_user_id=user.id, pending_purpose="reset")
issue_email_code(email, "reset") reason = issue_email_code(email, "reset")
if reason in {None, "resend_wait"}:
if reason == "resend_wait":
flash("邮箱验证码已发送,请直接输入验证码继续。", "info")
return redirect(url_for("main.verify_email", purpose="reset"))
flash(email_code_issue_message(reason), "error")
return redirect(url_for("main.forgot_password"))
flash("若该邮箱已注册,验证码将发送至邮箱。", "info") flash("若该邮箱已注册,验证码将发送至邮箱。", "info")
return redirect(url_for("main.login")) return redirect(url_for("main.login"))
+1
View File
@@ -305,6 +305,7 @@ class EmailAuthenticationTest(unittest.TestCase):
client = app.test_client() client = app.test_client()
response = self.form(client, "/forgot-password", email="alice@example.com") response = self.form(client, "/forgot-password", email="alice@example.com")
self.assertEqual(response.status_code, 302) self.assertEqual(response.status_code, 302)
self.assertEqual(response.location, "/verify/reset")
verify = client.get("/verify/reset") verify = client.get("/verify/reset")
response = client.post("/verify/reset", data={"csrf_token": self.csrf(verify), "code": "123456"}) response = client.post("/verify/reset", data={"csrf_token": self.csrf(verify), "code": "123456"})
self.assertEqual(response.location, "/set-password") self.assertEqual(response.location, "/set-password")