Не удается получить идентификатор пользователя с токеном с помощью django rest framework? - PullRequest
0 голосов
/ 19 апреля 2019

Я использую django Django = 2.1.7 и остальные фреймворки djangorestframework = 3.9.2 Это мой URL для входа в систему

path('rest-auth/', include('rest_auth.urls')),

После аутентификации я получил токен, но мне также нужен идентификатор пользователя. Я попытался переопределить метод post файла rest_framework.authtoken.views.py с помощью следующего кода

    def post(self, request, *args, **kwargs):
        serializer = self.serializer_class(data=request.data,
                                           context={'request': request})
        serializer.is_valid(raise_exception=True)
        user = serializer.validated_data['user']
        token, created = Token.objects.get_or_create(user=user)
        context = {
            'token': token.key,
            'user': user.id
        }
        return Response({'context': context})

Пожалуйста, помогите мне понять, как получить идентификатор пользователя с токеном. Это мой проект колледжа.

Примечание. Я нашел много ответов о переполнении стека, но ни один из них не помог.

1 Ответ

0 голосов
/ 21 апреля 2019

Используйте эту аутентификацию токена Django RestFramework для использования аутентификации.Здесь вы можете увидеть, как проходить аутентификацию, однако, если вы хотите использовать аутентификацию токена по умолчанию для всех представлений, вы должны добавить ее в файл settings.py как:

REST_FRAMEWORK = {
   'DEFAULT_AUTHENTICATION_CLASSES': (
       ...
       'rest_framework.authentication.TokenAuthentication',
       ...
    ),
}

или добавить ее вручную в представления, которыетребует аутентификации токена.И в этом представлении вы можете получить аутентифицированного пользователя как request.user или self.request.user.

from rest_framework.authentication import TokenAuthentication

class ViewSetName(ViewSet):
    authentication_classes = [TokenAuthentication]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...