Django - Erlaube doppelte Benutzernamen

8

Ich arbeite an einem Projekt in django, das nach separaten Gruppen von Benutzern in ihrem eigenen username -Namespace verlangt.

Zum Beispiel könnte ich mehrere "Organisationen" haben, und username sollte nur innerhalb dieser Organisation eindeutig sein.

Ich weiß, dass ich dies tun kann, indem ich ein anderes Modell benutze, das einen Benutzernamen / eine Organisations-ID enthält, aber immer noch dieses nutzlose (und erforderliche) Feld auf dem default django auth User , das ich mit etwas füllen müsste / p>

Ich habe bereits von einem eigenen Authentifizierungs-Backend geschrieben, das einen Benutzer gegen LDAP authentifiziert. Wie ich bereits erwähnt habe, stehe ich jedoch immer noch vor dem Problem, das username -Feld des Standard-Django-Benutzers aufzufüllen / zu ignorieren.

Gibt es eine Möglichkeit, die Eindeutigkeitseinschränkung für die username für Django-Auth-Benutzer zu löschen?

    
TM. 08.01.2010, 15:22
quelle

4 Antworten

7

Ich bin mir nicht sicher, ob das genau das ist, wonach Sie suchen, aber ich denke, Sie könnten einen Hack verwenden, der dem ähnlich ist, was in diese Antwort .

Der folgende Code funktioniert, solange er sich an einem Ort befindet, der ausgeführt wird, wenn Django Ihre Modelle lädt.

%Vor%

Beachten Sie, dass dadurch die Einschränkung der Datenbankeindeutigkeit für die Tabelle auth_user nicht geändert wird, wenn sie bereits erstellt wurde. Daher müssen Sie diese Änderung vor vornehmen, um syncdb auszuführen. Wenn Sie die Tabelle auth_user nicht neu erstellen möchten, können Sie diese Änderung auch manuell vornehmen und dann die Datenbanktabelle manuell ändern, um die Einschränkung zu entfernen.

    
Monika Sulik 08.01.2010, 15:29
quelle
5

Was Sie tun können, ist das Benutzermodell zu erweitern. Generieren Sie für die Benutzertabelle einen Benutzernamen (z. B. A_123, A_345), der auf der Website überhaupt nicht angezeigt wird.

Erstellen Sie dann ein neues Modell, das den Benutzer erweitert.

%Vor%

Sie erstellen dann ein benutzerdefiniertes Authentifizierungs-Back-End, das anstelle des Benutzerobjekts AppUser verwendet.

    
dannyroa 08.01.2010 19:22
quelle
1

Ich bin persönlich nicht dazu gezwungen worden, eine Lösung dafür zu finden, aber eine Möglichkeit, dies (aus Sicht von SAAS) anzugehen, wäre, dem Benutzernamen eine Organisationskennung voranzutreiben (unter der Annahme von einzigartigen Organisationen). Beispiel: subdomain.yoursite.com würde einem Benutzer mit dem Benutzernamen "subdomain_username" entsprechen. Sie müssten nur eine Geschäftslogik beim Login in eine Subdomain codieren, um das auf den Benutzernamen zu übertragen.

    
DrBloodmoney 08.01.2010 16:40
quelle
0

Ich stehe genau vor dem gleichen Problem und habe viel gelesen (über die Lösung dieses Problems in 1.5) und ich dachte mir einfach eine viel einfachere Lösung aus. Was ist, wenn Sie einfach ein Präfix mit fester Länge mit der Organisations-ID hinzufügen, um den Benutzernamen zu speichern?

i.e. Organisations-ID = 115, ausgewählter Benutzername="John" und eine feste Länge von 6. So speichern Sie in der Datenbank als Benutzername "000115_john".

Wenn Sie die Anmeldung vornehmen, verbinden Sie einfach die beiden Parameter und versuchen, sich mit dem zu authentifizieren, was Django bietet. Ich bin mir nicht sicher, ob die feste Länge unbedingt notwendig ist, aber kann unerwünschte Ergebnisse vermeiden, wenn ein Benutzer einen Benutzernamen mit nur Zahlen wählt.

    
steven2308 27.06.2013 13:23
quelle

Tags und Links