Как использовать django REST JWT авторизацию и аутентификацию в представлениях на основе классов

Я использую аутентификацию JWT. Я использую этот тип приложения авторизации.

Я пытаюсь понять, как использовать это в представлении.

Пример. Скажем, я хочу разрешить пользователю создавать утвержденное место, только если у него есть правильные разрешения. Что бы я добавил к этому представлению, чтобы получить доступ к пользователю?

Я знаю, что у Джанго request.user но как мне это включить? Всегда ли он включен, а request.user равен нулю, если токен не передан в заголовок? Или это промежуточное ПО? Проблема, с которой я столкнулся в конечном итоге, заключается в том, что к этому моменту много информации, но очень мало о том, как на самом деле использовать JWT в представлении.

пожалуйста помоги.

# for creating an approved venue add ons later
class CreateApprovedVenue(CreateAPIView):
    queryset = Venue.objects.all()
    serializer_class = VenueSerializer

jwt docs https://getblimp.github.io/django-rest-framework-jwt/

Документы о разрешениях остальных рамок http://www.django-rest-framework.org/api-guide/permissions/

поэтому я обнаружил этот ресурс и смотрю на него сейчас. https://code.tutsplus.com/tutorials/how-to-authenticate-with-jwt-in-django--cms-30460

Этот пример является светом затенения:

# users/views.py
class CreateUserAPIView(APIView):
    # Allow any user (authenticated or not) to access this url 
    permission_classes = (AllowAny,)

    def post(self, request):
        user = request.data
        serializer = UserSerializer(data=user)
        serializer.is_valid(raise_exception=True)
        serializer.save()
        return Response(serializer.data, status=status.HTTP_201_CREATED)

1 ответ

Решение

Чтобы использовать аутентификацию JWT, вам необходимо выполнить следующие шаги установки: https://getblimp.github.io/django-rest-framework-jwt/

Как только это будет сделано, вы можете включить аутентификацию, просто добавив authentication_classes следующее

# for creating an approved venue add ons later
class CreateApprovedVenue(CreateAPIView):
    authentication_classes = (JSONWebTokenAuthentication, )
    queryset = Venue.objects.all()
    serializer_class = VenueSerializer

И у вас есть пользователь, доступный для вас как request.user во всех методах запроса. В случае с CreateAPIView ты можешь сделать:

def post(self, request, *args, **kwargs):
    user = request.user
    ...