django-vue-admin/dvadmin-backend/utils/jwt_util.py

52 lines
1.3 KiB
Python

from calendar import timegm
from datetime import datetime
from django.conf import settings
from django.contrib.auth import login
def jwt_response_payload_handler(token, user, request):
"""
重写JWT的返回值
:param token:
:param user:
:param request:
:return:
"""
login(request, user)
return {
'token': f"{token}",
}
def jwt_get_secret_key(payload=None):
if isinstance(payload, dict):
return payload.get("secret", "")
return getattr(payload, "secret", "")
def jwt_get_user_secret_key(user):
"""
重写JWT的secret的生成
:param user:
:return:
"""
return str(user.secret)
def jwt_payload_handler(user):
payload = {
'user_id': user.pk,
'username': user.username,
'secret': jwt_get_user_secret_key(user),
'exp': datetime.utcnow() + settings.JWT_AUTH.get('JWT_EXPIRATION_DELTA')
}
if settings.JWT_AUTH.get('JWT_ALLOW_REFRESH'):
payload['orig_iat'] = timegm(
datetime.utcnow().utctimetuple()
)
if settings.JWT_AUTH.get('JWT_AUDIENCE',None) is not None:
payload['aud'] = settings.JWT_AUTH.get('JWT_AUDIENCE',None)
if settings.JWT_AUTH.get('JWT_ISSUER',None) is not None:
payload['iss'] = settings.JWT_AUTH.get('JWT_ISSUER',None)
return payload