以下代码成功生成令牌并将链接发送到用户的收件箱以进行确认。但是当用户点击它时,Flask 并没有识别它刚刚创建的令牌。这是错误消息:
“从 ts.loads 得到异常:404 Not Found:在服务器上找不到请求的 URL。如果您手动输入了 URL,请检查您的拼写并重试。”
最重要的是,如果我可以使确认程序正常工作,这就是应该执行的:
return redirect(url_for('tutorials'))
但是,正如您可以通过注意来自 的错误消息拼凑起来的那样@app.errorhandler(404)
,出了点问题。我真的被困住了。这些测试是在达到 86400 秒的 max_age 之前完成的。任何帮助将非常感激!!!
from itsdangerous import URLSafeTimedSerializer
ts = URLSafeTimedSerializer(SECRET_KEY, salt='email-confirm-key')
@app.route('/signup', methods=['GET', 'POST'])
def signup():
#skipping unrelated lines of code
token = ts.dumps(form.email.data, salt='email-confirm-key')
subject = 'subject goes here'
msg = Message(subject=subject, sender='name@email.com', recipients=form.email.data.split())
link = url_for('confirm_email', token=token, _external=True)
msg.html = render_template("email_confirmationemail.html", link=link, name=request.form['first_name'])
with app.app_context():
mail.send(msg)
return redirect(url_for('checkyouremail'))
@app.route('/confirmemail/<token>')
def confirm_email(token):
try:
email = ts.loads(token, salt='email-confirm-key', max_age=86400)
#skipping unrelated lines of code
return redirect(url_for('tutorials'))
@app.errorhandler(404)
def not_found(e):
print('Got exception from ts.loads: {}'.format(e))
return render_template('404.html')