Ошибка подписи при нажатии на ссылку в шаблоне - PullRequest
0 голосов
/ 26 апреля 2020

Я управляю электронными письмами с подтверждением и хочу, чтобы у ссылки была дата истечения срока действия. Я успешно сделал это и установил время на 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 %}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...