Подтвердить что ты не робот

Django: Заголовок проверки подлинности Rest Framework

Используя API Django REST, я пытаюсь выполнить аутентификацию моего запроса.

Это то, что я пытаюсь отправить:

Content-Type: application/json, Authentication: token="6d82549b48a8b079f618ee9c51a6dfb59c7e2196"

Вот что я возвращаю:

{"detail": "Authentication credentials were not provided."}

Может ли кто-нибудь дать мне правильный заголовок?

Спасибо

Заголовок:

Accept: application/json
Content-Type: application/json
Authorization: Token 6d82549b48a8b079f618ee9c51a6dfb59c7e2196
Connection: keep-alive
Origin: chrome-extension: //rest-console-id
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17

enter image description here

Settings.py

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.authentication.TokenAuthentication',
        'rest_framework.permissions.IsAdminUser',


    ),
    'PAGINATE_BY': 10
}

view.py

class ProfileList(generics.ListCreateAPIView):
    """
    API endpoint that represents a list of users.
    """
    permission_classes = (permissions.IsAuthenticated,)
    model = Profile
    serializer_class = ProfileSerializer

    def pre_save(self, obj):
        obj.owner = self.request.user
4b9b3361

Ответ 1

Предполагая, что вы пытаетесь использовать TokenAuthentication, заголовок должен выглядеть следующим образом:

Authorization: Token 6d82549b48a8b079f618ee9c51a6dfb59c7e2196

Как описано в документации.

Ответ 2

На всякий случай кто-то сталкивается с этой ошибкой. Это также может произойти, если вы запускаете Django на Apache, используя mod_wsgi, потому что заголовок авторизации отключен mod_wsgi. Вам нужно добавить в конфигурацию VirtualHost следующее:

WSGIPassAuthorization On

Ответ 3

У меня были те же проблемы с моей аутентификацией Token

Это устранило проблему для меня

settings.py

REST_FRAMEWORK = {
   'DEFAULT_AUTHENTICATION_CLASSES': (
       'rest_framework.authentication.TokenAuthentication',
   ),
   'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAdminUser'
   ),
   'PAGINATE_BY': 10,
}

Ответ 4

В моем случае это работает:
(Django REST Framework v3)

settings.py

REST_FRAMEWORK = {
   'DEFAULT_AUTHENTICATION_CLASSES': (
       'rest_framework.authentication.TokenAuthentication',
       'rest_framework.authentication.SessionAuthentication',
   ),
   'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
   ),
}

views.py

class Test(APIView):
    def get(self, request, format=None):   
        return Response({'Result': 'OK'})

urls.py

router.add_api_view('test', url(r'^test/', views.Test.as_view(),name='test'))

Не забудьте отправить данные маркера в заголовок:

 Key: Authorization  
 Value: Token 76efd80cd6849ad7d35e04f1cc1eea35bdc20294

Чтобы сгенерировать токены, вы можете использовать следующее (где-то в вашем коде):

from rest_framework.authtoken.models import Token            
user = User.objects.get(username='<username>')
token = Token.objects.create(user=user)
print(token.key)

Ответ 5

Для тех, кто находится на эластичном бобовом стебле AWS, и вы как бы застряли с апачем, и если у вас нет

WSGIPassAuthorization On

Как уже упоминалось @Fiver, ваши заголовки разделяются

Вместо того, чтобы вручную исправлять это и создавать новое изображение, я сделал script, который проверяет, является ли последняя строка файла conf WSGIPassAuthorization On, и если мы не обновляем его и не перезапускаем сервер

В моем приложении Django у меня есть папка config с моим файлом sh

конфиги/сервер/update-apache.sh

if [[ $(tac /etc/httpd/conf/httpd.conf | egrep -m 1 .) == $(echo 'WSGIPassAuthorization On') ]];
  then
     echo "Httpd.conf has already been updated"
  else
     echo "Updating Httpd.conf.."
     echo 'WSGIPassAuthorization On' >> /etc/httpd/conf/httpd.conf
     service httpd restart
fi

Сделайте это excecutable, прежде чем я передам его git

chmod +x configs/server/update-apache.sh

Затем в моем файле python.config я добавляю команду в конец

.ebextensions/python.config

...
...
container_commands:
    01_migrate:
        command: "python manage.py migrate"
        leader_only: true
    02_collectstatic:
        command: "python manage.py collectstatic --noinput"
    03_change_perm:
        command: "chown -R wsgi:root static"
    03_update_apache:
        command: "sh configs/server/update-apache.sh"

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