Ошибка при попытке истечь срок действия токена с помощью 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 секунд.

0 ответов

Другие вопросы по тегам