在设置flask中电子邮件确认的过期时间时出现问题



我有这个代码的电子邮件确认在我的flask应用程序,但max_age不发送,总是即使我等待2小时的工作,我使用这篇文章写这个cod https://realpython.com/handling-email-confirmation-in-flask/是什么这个cod问题,我怎么能解决这个

from itsdangerous import URLSafeSerializer
from flask_mail import Mail, Message
mail = Mail(flask_app)
serializer = URLSafeSerializer(flask_app.secret_key)

@flask_app.route("/confirm", methods=["POST", "GET"])
@login_required
def confirm():
image = get_photo("cafe")
user_email = current_user.email
message = "Please Confirm your Email address with the link blow"
token = serializer.dumps(user_email, salt="email-confirm")
link = url_for("confirm_email", token=token, _external=True)
unsubscribe_token = serializer.dumps(user_email, salt="unsubscribe")
unsubscribe = url_for("unsubscribe", _external=True, token=unsubscribe_token)
msg = Message("Confirm Email",
sender=flask_app.config["MAIL_USERNAME"],
recipients=[user_email])
msg.body = render_template("public/email/single-news.html",
user=current_user,
link=link,
image=image,
message=message,
unsubscribe=unsubscribe)
msg.html = render_template("public/email/single-news.html",
user=current_user,
link=link,
image=image,
message=message,
unsubscribe=unsubscribe)
mail.send(msg)
return redirect(url_for("index"))
@flask_app.route("/confirm_email/<token>")
def confirm_email(token):
try:
email = serializer.loads(token, salt="email-confirm", max_age=10)
except Exception as e:
print(e.args[0])
abort(406)
else:
return render_template("public/confirm.html",
user=current_user,
title="confirimed")

在阅读了更多的文档之后,我发现了问题,我在这里发布了答案,也许可以帮助其他人,我必须使用urlsafetimmedserializer和TimestampSigner而不是URLSafeSerializer,所以我将导入更改为

from itsdangerous import URLSafeTimedSerializer, TimestampSigner
from flask_mail import Mail, Message

并使用它们:

serializer = URLSafeTimedSerializer(flask_app.config["SECRET_KEY"])
timestamp = TimestampSigner(flask_app.config["SECRET_KEY"])

现在工作正常

最新更新