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
|