1

現在、プロジェクトの認証にDjango Rest Framework JWTを使用しています。私は既にBasicAuthentication、SessionAuthentication、JSONWebTokenAuthenticationを実装しています。ユーザーは新しいセッションごとにPOSTメソッドを使用してトークンを要求できます。しかし、各ユーザーが作成された直後に、トークンが作成されるようにしたい(管理セクションで表示される可能性があります)。Django Rest Framework JWTを使用した手動トークンJWT

私はそれは、トークンを手動で使用して作成することができると述べているDjangoの休憩FrameworkのJWTのドキュメントを見てみました:私はviews.py、models.pyとシリアライザで、このコードスニペットを入れてみました

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) 

を。私は "ユーザー"の参照エラーを取得し続けます。

このコードスニペットやその他の方法を正しく実装する方法については、ご了承ください。ありがとう

答えて

0

私は公式ドキュメントの例に従っていません。私は2行目と3行目でエラーが発生したためです。私の設定では、設定パスで例外が発生します。

私はライブラリ自体から直接関数を呼び出します。

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 

を返します