rest_framework.permissions.IsAuthenticated никогда не выполняется

avatar
student-n
8 августа 2021 в 17:09
102
0
0

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

Это реализация:

class vistaUsuarios(APIView):

    permission_classes = (IsAuthenticated,)

    def usuario(request):
        print("USUARIO ",request.user.is_authenticated)
        if request.method == 'GET':
            usuario = None
            id = request.GET.get("id")
            if id is not None:
                usuario = Usuario.objects.get(pk=id)
            usuarios_serializer = UsuarioSerializer(usuario)
            return JsonResponse(usuarios_serializer.data, safe=False)

settings.py

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication',
    ),
    'NON_FIELD_ERRORS_KEY': 'global',
}
# JWT settings

JWT_AUTH = {
    'JWT_ALLOW_REFRESH': True,
    'JWT_EXPIRATION_DELTA': timedelta(days=2),
}

# allauth

SITE_ID = 1
ACCOUNT_EMAIL_VERIFICATION = 'none'

# JWT settings

REST_USE_JWT = True

INSTALLED_APPS = [
    'corsheaders',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'subroutinesbackapp',
    'django.contrib.sites',
    'allauth',
    'allauth.account',
    'rest_auth',
    'rest_auth.registration'
]
...

Проблема в том, что IsAuthenticated никогда не выполняется. У меня там есть отпечаток, и никогда его не было.

class IsAuthenticated(BasePermission):
    """
    Allows access only to authenticated users.
    """

    def has_permission(self, request, view):
        print("holaaaaaaa")
        return bool(request.user and request.user.is_authenticated)

Метод usuario из класса vistaUsuarios всегда выполняется. Несмотря на то, что печать print("USUARIO ",request.user.is_authenticated) показывает USUARIO false, потому что я не передал действительный токен.

Как заставить выполняться метод IsAuthenticated? Заранее спасибо

Источник
Brian Destura
9 августа 2021 в 00:39
0

Кажется, вы использовали usuario в таких URL-адресах: vistaUsuarios.usuario. Это приведет к тому, что APIView вообще не будет использоваться. Если вы хотите срабатывать, измените usuario на допустимый метод APIView, например get.

Ответы (0)