with instalar framework con python django rest django-rest-framework

python - instalar - ¿Cómo creo una API de inicio de sesión usando Django Rest Framework?



python api framework (4)

Agregando nuestros puntos de vista:

from rest_framework_jwt.views import refresh_jwt_token urlpatterns = [ ... url(r''^rest-auth/'', include(''rest_auth.urls'')), url(r''^rest-auth/registration/'', include(''rest_auth.registration.urls'')), ... url(r''^refresh-token/'', refresh_jwt_token), ]

Quiero crear una API de inicio de sesión (o usar una existente si ya está incluida) usando django rest framework. Sin embargo, estoy completamente perdido. Cada vez que envío una solicitud posterior a la url de "inicio de sesión" de marco de descanso de django, simplemente devuelve la página de la plantilla de API apresurada ...

MI CONFIGURACIÓN

urls.py

url(r''^api/v1/'', include(''rest_framework.urls'', namespace=''rest_framework''))

settings.py

REST_FRAMEWORK = { ''DEFAULT_AUTHENTICATION_CLASSES'': ( ''rest_framework.authentication.BasicAuthentication'', ''rest_framework.authentication.SessionAuthentication'', ) }

LO QUE QUIERO

Solicitud:

POST /api/v1/login username=''name'' pass=''pass''

Respuesta:

200 OK "{username: ''name'', ''userId'': ''54321''}" set-cookie: sessionid="blahblah"


Eche un vistazo a la vista api de django-rest-framework-jwt . Es una implementación para crear tokens de autenticación en lugar de sesiones de cookies, pero su implementación será similar. Consulte views.py y serializers.py . Probablemente pueda usar serializers.py sin cambios, y simplemente ajuste sus vistas para devolver los parámetros correctos y posiblemente configure la cookie de sesión (no puede recordar si eso ya se realizó en la autenticación).


Por supuesto, token es una buena forma de autenticarse, pero el interlocutor pregunta por la autenticación de la sesión.

Solicitud:

POST /api/v1/login username=''username'' password=''password''

  • Ponga el valor de csrftoken en X-CSRFToken en el encabezado
  • A pesar de que alguien usa el email como nombre de usuario, se requiere un parámetro de nombre de username para ingresar el correo electrónico (por ejemplo, username=''[email protected]'' )

Respuesta:

302 FOUND sessionid="blahblah"

  • Si no especificó el next valor, se redirigirá automáticamente a /accounts/profile/ que puede generar un error 404

Si quieres algo como esto, hago lo mismo, pero utilizo la autenticación Token.

Echa un vistazo a su página de tokens here

Esto puede no ser lo que quieres, pero la forma en que lo hago es (ya que lo estoy usando como punto final de la API de reposo para clientes móviles)

Puedo hacer mi url localhost:8000/api/users/ -H Authorization : Token Un navegador podría usar la página de inicio de sesión normal que cree en la url del marco de descanso provisto

url(r''^api-auth/'', include(''rest_framework.urls'', namespace=''rest_framework'')

y para obtener tokens para la navegación ''login-less''

url(r''^api-token-auth/'', ''rest_framework.authtoken.views.obtain_auth_token'')

Luego, si realiza llamadas, puede pasar los tokens de autorización. Por supuesto, así es como lo hago y probablemente no sea la manera más eficiente, pero mi objetivo era crear una forma en que pueda proporcionar a los usuarios autenticación de sesión para navegadores y acceso móvil a través de tokens.

Luego, en su views.py asegúrese de agregar los requisitos de autenticación para esa vista. Casi lo mismo que la sección de autenticación de sesión

permission_classes = (permissions.IsAdminUser,)

pero también incluye

authentication_classes = (authentication.TokenAuthentication,)

Espero que esto ayude, pero si no, buena suerte en tu búsqueda.