it-swarm.com.de

Wie erstelle ich eine Login-API mit Django Rest Framework?

Ich möchte eine Login-API erstellen (oder eine vorhandene verwenden, wenn sie bereits vorab im Bundle enthalten ist) und das Django-Rest-Framework verwenden. Ich bin jedoch völlig ratlos. Immer wenn ich eine Post-Anfrage an die Login-URL des Django-Rest-Frameworks sende, wird nur die Seite mit den durchsuchbaren API-Seiten zurückgegeben.

MEINE KONFIGURATION

urls.py

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

einstellungen.py

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

WAS ICH MÖCHTE  

Anfordern: 

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

Antwort: 

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

Werfen Sie einen Blick auf die Api-Ansicht von Django-rest-framework-jwt . Es ist eine Implementierung zum Erstellen von Authentifizierungs-Token anstelle von Cookie-Sitzungen. Ihre Implementierung wird jedoch ähnlich sein. Siehe views.py und serializers.py . Sie können den serializers.py wahrscheinlich unverändert verwenden und Ihre Ansichten anpassen, um die richtigen Parameter zurückzugeben und möglicherweise den Sitzungscookie festzulegen (kann sich nicht daran erinnern, ob dies bereits in der Authentifizierung erfolgt ist).

36
Kevin Stone

Wenn Sie so etwas wollen, mache ich dasselbe, aber ich benutze die Token-Authentifizierung.

Schauen Sie sich die Tokenseite an hier

Dies ist möglicherweise nicht das, was Sie wollen, aber die Art und Weise, wie ich es tue, ist (da ich es als ein Rest-API-Endpunkt für mobile Clients verwende).

Ich kann meine URL localhost:8000/api/users/ -H Authorization : Token Erstellen. Ein Browser könnte dann die reguläre Anmeldeseite verwenden, die Sie unter der angegebenen URL für das Rest-Framework erstellen

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

und um Token für die Navigation ohne Login zu erhalten

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

Wenn Sie dann Anrufe tätigen, können Sie die Autorisierungstoken weitergeben. Natürlich mache ich das so und es ist wahrscheinlich nicht der effizienteste Weg, aber mein Ziel war es, eine Möglichkeit zu schaffen, mit der ich Benutzern die Sitzungsauthentifizierung für Browser und den mobilen Zugriff über Token zur Verfügung stellen kann.

Stellen Sie dann in Ihrer Datei views.py sicher, dass Sie die Authentifizierungsanforderungen für diese Ansicht hinzufügen. Fast das gleiche wie der Abschnitt zur Sitzungsauthentifizierung

permission_classes = (permissions.IsAdminUser,)

sondern auch einschließen

authentication_classes = (authentication.TokenAuthentication,)

Ich hoffe das hilft aber wenn nicht, viel Glück bei deiner Suche.

14
timothydillman

Natürlich ist ein Token eine gute Methode zur Authentifizierung, aber der Fragesteller fragt nach der Sitzungsauthentifizierung.

Anfordern:

POST /api/v1/login  username='username' password='password' 
  • Setzen Sie den csrftoken-Wert im Header auf X-CSRFToken
  • Selbst wenn jemand email als Benutzername verwendet, ist der Parameter username name für die E-Mail-Eingabe erforderlich (z. B. username='[email protected]').

Antwort:

302 FOUND sessionid="blahblah"
  • Wenn Sie keinen next-Wert angegeben haben, wird er automatisch in /accounts/profile/ umgeleitet, was zu einem 404-Fehler führen kann
11

Unsere Ansichten hinzufügen:

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