В чем разница между 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.