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
enX-CSRFToken
en el encabezado - A pesar de que alguien usa el
email
como nombre de usuario, se requiere un parámetro de nombre deusername
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.