1

我目前正在使用Django Rest Framework JWT進行項目驗證。我已經實現了BasicAuthentication,SessionAuthentication和JSONWebTokenAuthentication,用戶可以通過使用POST方法爲每個新會話請求令牌。但是,我希望在創建每個用戶後立即創建令牌(並可能在管理員部分中查看)。手動令牌與Django Rest框架JWT

我看了一下Django的REST框架JWT文檔它指出,令牌可以使用手動創建:

from rest_framework_jwt.settings import api_settings 

jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER 
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER 

payload = jwt_payload_handler(user) 
token = jwt_encode_handler(payload) 

我試圖把這個代碼片斷在views.py,models.py和序列化。 py,但我不斷收到「用戶」的參考錯誤。

任何有關如何正確實現此代碼段或替代方法的幫助將不勝感激。謝謝

回答

0

我沒有按照正式文檔的例子。因爲我得到了第二和第三行的錯誤。我的配置在我的設置路徑中引發了一個例外。

我直接從庫本身調用函數。

from rest_framework_jwt.utils import jwt_payload_handler, jwt_encode_handler 

假設我的函數取1個字典作爲輸入,並返回token

from rest_framework_jwt.utils import jwt_payload_handler, jwt_encode_handler 

def create_token(platform_data: typing.Dict): 
    """ 
    System will search from userprofile model 
    Then create user instance 
    :param platform_data: 
    :return: 
    """ 
    # If found `userprofile `in the system use the existing 
    # If not create new `user` and `userprofile` 

    platform_id = platform_data.get('id') # Can trust this because it is primary key 
    email = platform_data.get('email') # This is user input should not trust 

    userprofile_qs = UserProfile.objects.filter(platform_id=platform_id) 
    if userprofile_qs.exists(): 
     # user exists in the system 
     # return Response token 
     userprofile = userprofile_qs.first() 
     user = userprofile.user 
    else: 
     # Create user and then bind it with userprofile 
     user = User.objects.create(
      username=f'poink{platform_id}', 
     ) 
    user.email = email # Get latest email 
    user.save() 
    UserProfile.objects.create(
     platform_id=platform_id, 
     user=user, 
    ) 

    payload = jwt_payload_handler(user) 
    token = jwt_encode_handler(payload) 
    return token 

希望得到的想法從這個