Je veux créer une API de connexion (ou en utiliser une existante si elle est déjà pré-intégrée) à l'aide de Django Rest Framework. Cependant, je suis complètement désemparé. Chaque fois que j'envoie une demande de publication à l'adresse "login" de Django Rest Framework, elle renvoie simplement la page du modèle api que vous pouvez parcourir ...
MA CONFIGURATION
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',
)
}
CE QUE JE VEUX
Demande:
POST /api/v1/login username='name' pass='pass'
Réponse:
200 OK "{username: 'name', 'userId': '54321'}" set-cookie: sessionid="blahblah"
Jetez un coup d'œil à la vue api de Django-rest-framework-jwt . C'est une implémentation permettant de créer des jetons d'authentification plutôt que des sessions de cookies, mais votre implémentation sera similaire. Voir views.py et serializers.py . Vous pouvez probablement utiliser le serializers.py
inchangé et ajuster vos vues pour renvoyer les bons paramètres et éventuellement définir le cookie de session (impossible de se rappeler si cela a déjà été effectué dans l'authentification).
Bien sûr, le jeton est un bon moyen d'authentification, mais l'interrogateur pose des questions sur l'authentification de session.
Demande:
POST /api/v1/login username='username' password='password'
csrftoken
value à X-CSRFToken
dans l'en-têteemail
en tant que nom d'utilisateur a été classée, le paramètre username
name est requis pour la saisie de courrier électronique (par exemple username='[email protected]'
)Réponse:
302 FOUND sessionid="blahblah"
next
, il sera automatiquement redirigé vers /accounts/profile/
, ce qui peut générer une erreur 404Ajout de nos points de vue:
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),
]