Signed, expiring links

Make email-verification or reset links that expire, without a database table.

flask intermediate #auth#email#tokens
プレイグラウンドで開く
flask-itsdangerous-token.py
from itsdangerous import URLSafeTimedSerializer, BadSignature, SignatureExpired

serializer = URLSafeTimedSerializer(app.config["SECRET_KEY"], salt="email-verify")


def make_token(user_id: int) -> str:
    return serializer.dumps({"uid": user_id})


def read_token(token: str, max_age=3600):
    try:
        return serializer.loads(token, max_age=max_age)["uid"]
    except SignatureExpired:
        return None          # ask the user for a new link
    except BadSignature:
        return None          # tampered or wrong salt