Добрый день.
Хочу добавить возможность сброса пароля на сайт Flask с помощтю JWT и пакета flask PyJWT.
На данный момент, можно несколько раз запросить письмо в котором будет ссылка с токеном и после смены пароля остальные ссылки с токеном останутся действительными. То есть так же можно будет по ним переходить и менять пароль дальше. Я же хочу сделать, что после перехода по ссылки с токеном и сброса пароля все остальные ссылки были уже недействительные(в том случае, если пользователь их много запросил).
Функции создания и проверки токена:
def get_reset_password_token(self, expires_in=600):
return jwt.encode({'reset_password': self.id,
'exp': time() + expires_in},
app.config['SECRET_KEY'],
algorithm='HS256')
@staticmethod
def verify_reset_password_token(token):
try:
id = jwt.decode(token, app.config['SECRET_KEY'], algorithms=['HS256'])['reset_password']
except:
return
return User.query.get(id)
Функция представления для изменения пароля:
@app.route('/reset_password/<token>', methods=['POST', 'GET'])
def reset_password(token):
if current_user.is_authenticated:
return redirect(url_for('/'))
user = User.verify_reset_password_token(token)
if not user:
return redirect(url_for('index'))
form = ResetPasswordForm()
if form.validate_on_submit():
user.set_password(form.password.data)
db.session.commit()
flash('Ваш пароль изменён')
return redirect(url_for('login'))
return render_template('reset_password.html',
form=form)
Это код создания и проверки токена.
Буду благодарен за любую помощь!