Django simplejwt:如何向字典添加刷新令牌?
Django simplejwt: How to add refresh token to dict?
我正在使用 simplejwt 获取访问和刷新令牌。在一个视图中,我需要创建一个字典,其中将存储两者以及访问令牌声明和其他附加数据。一切正常,但由于某种原因,当将 refrsh 标记添加到 dict 时,它 returns 它的解码值,而不是标记。
我的views.py
@csrf_exempt
#@api_view(('GET',))
def check_token(request):
token_refresh = RefreshToken.for_user(request.user)
print('REFRESH', token_refresh)
token = request.META.get('HTTP_AUTHORIZATION', " ").split(' ')[1]
data = {'token': token, 'refresh_token': token_refresh}
try:
valid_data = TokenBackend(algorithm='HS256').decode(token, verify=False)
data['uui'] = valid_data['user_id']
data['validUntil'] = valid_data['exp']
data['clientId'] = 'default'
print(data)
return JsonResponse(data)
except ValidationError as v:
print("Validation error", v)
print('REFRESH', token_refresh) returns 令牌:
'REFRESH eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI...'
但数据对象 returns:
{'token': 'eyJ0eXAiOiJKV1QiLCJhbGci...', 'refresh_token': {'token_type': 'refresh', 'exp': 1628664751, 'jti': '38f0e3a4d7bb452681834a6b149aa496', 'user_id': 'None'}, 'uui': 1, 'validUntil': 1628059131, 'clientId': 'default'}
我的理想成绩:
{'token': 'eyJ0eXAiOiJKV1QiLCJhbGci...', 'refresh_token': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI...', 'uui': 1, 'validUntil': 1628059131, 'clientId': 'default'}
如果您想为 djangorestframework-simplejwt
中的用户手动创建令牌,您可以这样做:
from rest_framework_simplejwt.tokens import RefreshToken
def get_tokens_for_user(user):
refresh = RefreshToken.for_user(user)
return {
'refresh': str(refresh),
'access': str(refresh.access_token),
# Add additional fields here
}
现在您可以在视图中使用此功能了。
我正在使用 simplejwt 获取访问和刷新令牌。在一个视图中,我需要创建一个字典,其中将存储两者以及访问令牌声明和其他附加数据。一切正常,但由于某种原因,当将 refrsh 标记添加到 dict 时,它 returns 它的解码值,而不是标记。
我的views.py
@csrf_exempt
#@api_view(('GET',))
def check_token(request):
token_refresh = RefreshToken.for_user(request.user)
print('REFRESH', token_refresh)
token = request.META.get('HTTP_AUTHORIZATION', " ").split(' ')[1]
data = {'token': token, 'refresh_token': token_refresh}
try:
valid_data = TokenBackend(algorithm='HS256').decode(token, verify=False)
data['uui'] = valid_data['user_id']
data['validUntil'] = valid_data['exp']
data['clientId'] = 'default'
print(data)
return JsonResponse(data)
except ValidationError as v:
print("Validation error", v)
print('REFRESH', token_refresh) returns 令牌:
'REFRESH eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI...'
但数据对象 returns:
{'token': 'eyJ0eXAiOiJKV1QiLCJhbGci...', 'refresh_token': {'token_type': 'refresh', 'exp': 1628664751, 'jti': '38f0e3a4d7bb452681834a6b149aa496', 'user_id': 'None'}, 'uui': 1, 'validUntil': 1628059131, 'clientId': 'default'}
我的理想成绩:
{'token': 'eyJ0eXAiOiJKV1QiLCJhbGci...', 'refresh_token': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI...', 'uui': 1, 'validUntil': 1628059131, 'clientId': 'default'}
如果您想为 djangorestframework-simplejwt
中的用户手动创建令牌,您可以这样做:
from rest_framework_simplejwt.tokens import RefreshToken
def get_tokens_for_user(user):
refresh = RefreshToken.for_user(user)
return {
'refresh': str(refresh),
'access': str(refresh.access_token),
# Add additional fields here
}
现在您可以在视图中使用此功能了。