2016-10-25 3 views
2

Wie der Titel sagt, entwickle ich eine Django-App, die eine andere API verwendet, um den Benutzer zu authentifizieren. Die externe API ist recht einfach und gibt ein Zertifikat zurück, wenn der Benutzer ordnungsgemäß authentifiziert wurde. Meine App sollte keine Benutzerinformationen enthalten, außer dem Zertifikat und der ID (die ich als Sitzungsvariablen behalte).Externe Authentifizierung in einer Django-App

Als ein Nachteil dieser Implementierung, verwende ich nicht Djangos Authentifizierungssystem und alle praktischen Methoden, die es bietet, überprüfen, ob der Benutzer is_authenticated, is_anonymous oder Benutzerberechtigungen erhalten.

Da der Benutzer für den Zugriff auf einige Seiten meiner App angemeldet sein muss, muss ich ihn auch bitten, sich einzuloggen, damit er/sie fortfahren kann. Daher wäre die Verwendung von @login_required Handvoll.

Ich muss auch ein Access Control-Modul erstellen, um Berechtigungen zu überprüfen und den Zugriff auf einige eingeschränkte Bereiche der App nach Benutzergruppen (allgemeine Benutzer, Administratoren, etc.) zu erlauben.

Wissen Sie, wie ich Djangos Authentifizierungssystem anpassen könnte, um all diese Probleme zu lösen?

Antwort

2

Sie haben in Ihrem request angemeldeten Benutzers zu halten, so melden Sie sich nur um ihn ohne Authentifizierung

from django.contrib.auth import login 

def authenticate_by_api_view(request): 
    certificate = do_the_magic() 

    if certificate_valid(certificate): 
     user = User() 
     #you can set ID here and save the user to the DB then 
     login(request, user) 

Wenn Sie überhaupt Benutzer nicht speichern möchten Sie einen Blick auf die django-lazysignup Projekt nehmen oder verwenden eher Django sessions framework

+0

Im Moment verwende ich Django-Sitzungen, aber es gibt mir nicht die Möglichkeit zu überprüfen, ob der Benutzer authentifiziert ist. Ich muss die Sitzungsattribute bei jedem Aufruf einer Methode manuell überprüfen. Außerdem ist es ein wenig schwierig, private URLs zu handhaben, auf die der Benutzer nur Zugriff haben muss, wenn er geloggt wird. Und du hast Recht, ich möchte keinen Benutzer speichern. – revy

+0

Wenn ich Sie wäre und ich nicht * Lazysignup * verwenden wollte Ich würde nur den Benutzer mit einigen Temp-Daten speichern - Ich würde irgendwann eine Aufgabe hinzufügen, die Benutzer entfernen würde, deren * letztes Anmeldedatum * vor dem heutigen Tag ist –

Verwandte Themen