src/auth/routes.py : route /auth/verify-email (#73)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -47,3 +47,15 @@ def signup():
|
|||||||
return _redirect_with_error("/inscription", "email_send_failed", email)
|
return _redirect_with_error("/inscription", "email_send_failed", email)
|
||||||
|
|
||||||
return redirect("/connexion?pending_verification=1")
|
return redirect("/connexion?pending_verification=1")
|
||||||
|
|
||||||
|
|
||||||
|
@auth_bp.route("/verify-email", methods=["GET"])
|
||||||
|
def verify_email():
|
||||||
|
token = request.args.get("token") or ""
|
||||||
|
if not token:
|
||||||
|
return redirect("/verification-email?error=invalid_token")
|
||||||
|
user_id = tokens.consume_verification_token(token)
|
||||||
|
if user_id is None:
|
||||||
|
return redirect("/verification-email?error=invalid_token")
|
||||||
|
db.set_email_verified(user_id)
|
||||||
|
return redirect("/connexion?verified=1")
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
from src.auth import db, tokens
|
||||||
|
|
||||||
|
|
||||||
|
def test_verify_email_valid_token_marks_user_verified(client, users_db_path):
|
||||||
|
db.init_schema()
|
||||||
|
uid = db.create_user("a@b.c", "hash")
|
||||||
|
token = tokens.create_verification_token(uid)
|
||||||
|
|
||||||
|
resp = client.get(f"/auth/verify-email?token={token}")
|
||||||
|
assert resp.status_code == 302
|
||||||
|
assert "/connexion?verified=1" in resp.headers["Location"]
|
||||||
|
assert db.get_user_by_id(uid)["email_verified"] == 1
|
||||||
|
|
||||||
|
|
||||||
|
def test_verify_email_invalid_token(client):
|
||||||
|
resp = client.get("/auth/verify-email?token=invalide")
|
||||||
|
assert "error=invalid_token" in resp.headers["Location"]
|
||||||
|
|
||||||
|
|
||||||
|
def test_verify_email_missing_token(client):
|
||||||
|
resp = client.get("/auth/verify-email")
|
||||||
|
assert "error=invalid_token" in resp.headers["Location"]
|
||||||
|
|
||||||
|
|
||||||
|
def test_verify_email_single_use(client, users_db_path):
|
||||||
|
db.init_schema()
|
||||||
|
uid = db.create_user("a@b.c", "h")
|
||||||
|
token = tokens.create_verification_token(uid)
|
||||||
|
client.get(f"/auth/verify-email?token={token}")
|
||||||
|
resp = client.get(f"/auth/verify-email?token={token}")
|
||||||
|
assert "error=invalid_token" in resp.headers["Location"]
|
||||||
Reference in New Issue
Block a user