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

60 lines
1.4 KiB
Python
Raw Normal View History

2021-03-15 14:33:40 +00:00
import uuid
2021-02-21 17:08:48 +00:00
from calendar import timegm
from datetime import datetime
2021-03-15 14:33:40 +00:00
import jwt
2021-02-21 17:08:48 +00:00
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}",
}
2021-03-15 14:33:40 +00:00
def jwt_get_session_id(token=None):
"""
获取会话id
:param token:
:return:
"""
payload = jwt.decode(token, None, False)
2021-02-21 17:08:48 +00:00
if isinstance(payload, dict):
2021-03-15 14:33:40 +00:00
return payload.get("session_id", "")
return getattr(payload, "session_id", "")
2021-02-21 17:08:48 +00:00
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,
2021-03-15 14:33:40 +00:00
'session_id': str(uuid.uuid4()),
2021-02-21 17:08:48 +00:00
'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