update password modelserializer jsonfield framework create django django-rest-framework

password - Django: Rest Framework autentica el encabezado



modelserializer django rest framework (5)

En caso de que alguien más se encuentre con este error. Esto también puede suceder si está ejecutando Django en Apache usando mod_wsgi porque el encabezado de autorización es eliminado por mod_wsgi. Deberá agregar lo siguiente a su configuración VirtualHost:

WSGIPassAuthorization On

Al utilizar la API REST de Django , intento autenticar mi solicitud.

Esto es lo que intento enviar:

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

Esto es lo que recibo:

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

¿Podría alguien darme el encabezado correcto?

Gracias

El encabezado:

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

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


En mi caso, esto funciona:
(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''))

No olvides enviar la información del token en el encabezado:

Key: Authorization Value: Token 76efd80cd6849ad7d35e04f1cc1eea35bdc20294

Para generar tokens puedes usar lo siguiente (en algún lugar de tu código):

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


Estaba teniendo el mismo problema con mi Autenticación Token

Esto me solucionó el problema

settings.py

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


Para aquellos que están en AWS Beanstalk elástico y que están un poco atrapados con Apache y a menos que tenga

WSGIPassAuthorization On

Como se menciona en @Fiver tus encabezados son eliminados

En lugar de arreglarlo manualmente y hacer una nueva imagen, hice un script que verifica si la última línea del archivo conf es WSGIPassAuthorization On y si no lo está, lo actualizamos y reiniciamos el servidor

En mi aplicación Django tengo una carpeta de configuración con mi archivo sh

configs / server / 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

Haz que sea excelente antes de comprometerlo con git

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

Luego en mi archivo python.config agrego el comando al final

.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"

Ahora, cualquier máquina nueva que se inicie tendrá una verificación para ver si el servidor está actualizado y si es necesario


Suponiendo que está intentando usar TokenAuthentication, el encabezado debería verse así:

Authorization: Token 6d82549b48a8b079f618ee9c51a6dfb59c7e2196

Como se describe en la documentación .