52 lines
1.3 KiB
Python
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
|