Да, ваше решение - хорошая идея, я думаю, что лучшая реализация вашей идеи:
Добавьте в свои настройки следующее:
JWT_SECRET = SECRET_KEY # use settings secret key for JWT secret
JWT_ALGORITHM = 'HS256'
JWT_EXP_DELTA_SECONDS = 86400 # token expiring time in seconds let's assign one day
и вот функции для кодирования и декодированиятокен сброса:
from your_django_project import settings
from datetime import datetime, timedelta
import jwt
def encoded_reset_token(user_id):
payload = {
'user_id': user_id,
'exp': datetime.utcnow() + timedelta(seconds=settings.JWT_EXP_DELTA_SECONDS)
}
encoded_data = jwt.encode(payload, settings.JWT_SECRET, settings.JWT_ALGORITHM)
return encoded_data.decode('utf-8')
def decode_reset_token(reset_token):
try:
decoded_data = jwt.decode(reset_token, settings.JWT_SECRET,
algorithms=[settings.JWT_ALGORITHM])
except (jwt.DecodeError, jwt.ExpiredSignatureError):
return None # means expired token
return decoded_data['user_id']
, поэтому нет необходимости использовать дополнительную таблицу для хранения токенов сброса