Ошибка при попытке истечь срок действия токена с помощью TimedJSONWebSignatureSerializer для функции сброса пароля
Я прочитал в Интернете, что для истечения срока действия токена мне придется использовать expires_in
. Однако я не могу заставить его работать.
s = TimedJSONWebSignatureSerializer('secretkey', expires_in = 1)
@app.route('/reset', methods=['GET', 'POST'])
def reset():
msg = ''
if request.method == 'POST' and 'email' in request.form:
global email
email = request.form['email']
cursor = mysql.connection.cursor(MySQLdb.cursors.DictCursor)
cursor.execute('SELECT * FROM accounts WHERE email = %s', (email,))
account = cursor.fetchone()
if account:
print(account)
token = (s.dumps([account]))
sender_email = 'email'
recipient = account['email']
password = 'password'
message = f"""
Your password reset link:
{url_for('reset_token', token=token, _external=True)}
"""
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(sender_email, password)
server.sendmail(sender_email, recipient, message)
else:
msg = 'Failed'
return render_template('reset.html', msg=msg)
@app.route("/reset_password/<token>", methods=['GET', 'POST'])
def reset_token(token):
if current_user.is_authenticated:
return redirect(url_for('home'))
form2 = ResetPasswordForm()
if form2.validate_on_submit():
form2password = form2.confirm_password.data
cursor = mysql.connection.cursor(MySQLdb.cursors.DictCursor)
sqlupdate = ('UPDATE accounts SET password = %s WHERE email = %s')
value = (form2password, email)
cursor.execute(sqlupdate, value)
mysql.connection.commit()
flash('Your password has been updated! You are now able to log in', 'success')
return redirect(url_for('login'))
return render_template('reset_token.html', title='Reset Password', form=form2)
Я уже подтвердил, что письмо можно отправить, а пароль можно изменить. Проблема, с которой я столкнулся, заключается в том, что отправленная ссылка для сброса электронной почты не истекает и ее все еще можно использовать, я не знаю, как я могу ее решить. Я просмотрел онлайн-примеры и документацию, но они очень расплывчаты.
Я ожидаю, что ссылки для сброса пароля истекут через 5 минут /300 секунд.