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
    }  

现在您可以在视图中使用此功能了。