Я выполняю сброс пароля с помощью itsdangerous
TimedJSONWebSignatureSerializer
в своем приложении для фляги, при отправке адреса электронной почты я получаю следующую трассировку стека в make-header exp = iat + self.expires_in
и, наконец, TypeError: unsupported operand type(s) for +: 'int' and 'str'
. Что я не правильно делаю?
Я пытался изменить id на целое число, но безуспешно. Исследовано на декодирование, но это выглядит нормально.
Это мой код:
from datetime import datetime
from flask import current_app
from inventory import db, login_manager
from flask_login import UserMixin
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
class User(db.Model, UserMixin):
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True)
fullname = db.Column(db.String(120), nullable=False)
username = db.Column(db.String(20), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
phone = db.Column(db.String(50), unique=True, nullable=False)
image_file = db.Column(db.String(20), nullable=False, default='default.jpg')
password = db.Column(db.String(60), nullable=False)
items = db.relationship('Items', backref='items_admin', lazy=True)
orderitems = db.relationship('OrderItems', backref='user_order', lazy=True)
def get_reset_token(self, expires_sec=30000):
s = Serializer(current_app.config['SECRET_KEY'], expires_sec)
return s.dumps({'user_id': self.id}).decode('ascii') # This is the line that throws the said error.
@staticmethod
def verify_reset_token(token):
s = Serializer(current_app.config['SECRET_KEY'])
try:
user_id = s.loads(token)['user_id']
except:
return None
return User.query.get(user_id)
def __repr__(self):
return f"User('{self.username}', '{self.email}', '{self.image_file}')"
Я ожидаю, что ссылка для сброса будет отправлена на указанный адрес электронной почты без проблем.