В чем разница между permission_classes и authentication_classes в django rest framework generic API Views

Я знаю, что означают разрешения и аутентификация. Аутентификация идентифицирует пользователя, а разрешения определяют, какие действия может выполнять пользователь. Я реализовал аутентификацию токена в django rest framework. Проблема в том, что когда я указываю и permission_classes и authentication_classes в ListAPIView, я не могу войти в учетную запись на просматриваемой странице. Это работает только когда я удаляю классы аутентификации в представлении.

Следующий вид не вызывает исключения, но выдает { "detail": "Учетные данные для аутентификации не были предоставлены". } ответ. Также не происходит вход в систему.

class UserListView(generics.ListAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    permission_classes = (permissions.IsAdminUser,)
    authentication_classes = [TokenAuthentication] 

Но после удаления authentication_classes = [TokenAuthentication] страница работает.

PS: curl и httpie работают без проблем.

Так в чем же здесь может быть проблема? В чем разница между этими двумя классами?

После удаления класса TokenAuthentication вы можете получить доступ к api, потому что drf использует сеансовую аутентификацию и браузер обрабатывает сеансы для вас. Когда вы используете TokenAuthentication, вам нужно добавить токен в заголовок запроса, что не делается браузером. вот почему вы получаете { "detail": "Учетные данные для аутентификации не были предоставлены". }. Попробуйте этот api от postman, добавив токен в заголовки, тогда он будет работать.

заголовки будут иметь вид:-

Авторизация: Токен your-token

отметьте это для аутентификации токена. https://www.django-rest-framework.org/api-guide/authentication/

и убедитесь, что пользователь, выполняющий вызов api, должен быть администратором, поскольку вы указали разрешение IsAdminUser.

Вернуться на верх