Я управляю электронными письмами с подтверждением и хочу, чтобы у ссылки была дата истечения срока действия. Я успешно сделал это и установил время на 60 секунд только для целей тестирования. Теперь, после этих 60 секунд, я перенаправляю пользователя к шаблону, который говорит: «Срок действия ссылки истек, нажмите эту ссылку, чтобы зарегистрироваться снова», и отправляю ссылку на мой шаблон регистрации, но всякий раз, когда я нажимаю эту ссылку, я получаю следующую ошибку:
itsdangerous.exc.BadSignature: Signature b'html' does not match
Вот мой app.py:
@app.route("/register", methods=["GET", "POST"])
def register(encoding="latin1"):
if request.method == "GET":
return render_template("register.html")
if request.method == "POST":
user = User(name=request.form.get("name"), username=request.form.get("username").lower(), email=request.form.get("email").lower(), password=generate_password_hash(request.form.get("password")), genre=request.form.get("genre"))
existing_mail = User.query.filter_by(email=request.form.get("email").lower()).first()
existing_username = User.query.filter_by(username=request.form.get("username").lower()).first()
username=request.form.get("username").lower()
name=request.form.get("name")
genre=request.form.get("genre")
email=request.form.get("email").lower()
password=generate_password_hash(request.form.get("password"))
confirmation=(request.form.get("confirmation"))
if request.form.get("password") != confirmation:
flash("passwords dont match.")
return render_template("register.html")
if existing_mail is None and existing_username is None:
db.session.add(user)
db.session.commit()
session["user_id"] = user
token = s.dumps(email)
msg = Message("Mail confirmation", recipients=[email])
link = url_for("confirm_email", token=token, _external=True)
msg.html = "<b>WELCOME TO MY WEB PAGE, " + name + ".<b> <br> <p> enter this link to confirm your mail: {}".format(link)
mail.send(msg)
flash("We have just sent a mail to" + email + " Please validate it and then log in.")
return render_template("login.html")
@app.route("/confirm_email/<token>")
def confirm_email(token):
try:
email = s.loads(token, max_age=300)
return render_template("confirmationT.html")
except SignatureExpired:
return render_template("confirmationF.html")
А вот мое подтверждениеF html шаблон:
{% extends "layout.html" %}
{% block body %}
<div class="container">
<h5>Link has expired, generate another by <a href="register.html">registering</a> again.</h5>
</div>
{% endblock %}