Django JWT - Разрешить запрос без учетных данных, если ключ в теле действителен

У меня есть конечная точка, которой требуется Access Token для аутентификации. Также в этой конечной точке есть поле UUID сериализатора, которое не является обязательным. Я хотел бы сделать следующее:

  • В случае, если в теле передается поле UUID, проверьте, действителен ли этот UUID и зарегистрирован ли он в базе данных.
  • Если он не действителен, то возникнет ошибка DRF ValidationError.
  • Если поле UUID не передано, то запрос должен быть аутентифицирован с помощью Access Token.

Есть ли способ иметь такую селективную проверку подлинности?

Ну, спустя некоторое время я нашел решение. Я открыл разрешение на доступ к представлению любому пользователю, а внутри метода post проверил, является ли пользователь анонимным, чтобы проверить ключи тела запроса. В случае передачи действительного маркера доступа JWT пользователь был бы найден, и это возвращало False. Если любое из этих условий возвращает True, то выдается простой ответ об ошибке доступа

permission_classes = [
    AllowAny,
]

def post(self, request, *args, **kwargs):
    if request.user.is_anonymous:
        request_token = request.POST.get('token')
        token = Token.objects.filter(token=request_token)
        if token.exists() and token.values()[0]['status'] == 'valid':
            pass
        else:
            return Response(
                data={"Invalid Credentials": "Pass a valid credential."},
                status=status.HTTP_200_OK,
Вернуться на верх