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,