web-dev-qa-db-fra.com

Comment créer une API de connexion à l'aide de Django Rest Framework?

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"
55
JayPrime2012

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

36
Kevin Stone

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' 
  • Mettez csrftoken value à X-CSRFToken dans l'en-tête
  • Même si une personne utilisant email 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"
  • Si vous n'avez pas spécifié la valeur next, il sera automatiquement redirigé vers /accounts/profile/, ce qui peut générer une erreur 404
11
Chemical Programmer

Ajout 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),
]
0
mt2609