1

В настоящее время я использую Django Rest Framework JWT для аутентификации в проекте. Я уже реализовал BasicAuthentication, SessionAuthentication и JSONWebTokenAuthentication, где пользователи могут запрашивать токен, используя метод POST для каждого нового сеанса. Тем не менее, я хочу, чтобы маркер был создан (и, возможно, доступен для просмотра в разделе администратора) сразу после создания каждого пользователя.Ручной токен с Django Rest Framework JWT

Я посмотрел на документацию Django Framework 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

Я не последовал примеру официальных документов. Потому что я получил ошибку со 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 

Надежда получить идею от этого

Смежные вопросы