4 Stimmen

django-registration, django.contrib.auth Anmeldung und Benutzer "ist aktiv" Flagge

Ich benutze django 1.1. die docs
http://docs.djangoproject.com/en/1.1/topics/auth/#topics-auth
zum is_active-Flag heißt es

Dies hat keinen Einfluss darauf, ob der Benutzer sich anmelden kann. Nichts im Authentifizierungspfad prüft das is_active-Flag, wenn Sie also die eine Anmeldung ablehnen wollen, weil is_active Falsch ist, müssen Sie dies in Ihrer in Ihrer eigenen Login-Ansicht überprüfen. Wie auch immer, Berechtigungsprüfung mit den Methoden wie has_perm() prüft dieses Flag und gibt immer False für inaktive Benutzer.

Ich verwende django-registration (neueste Version 0.8 alpha) und verwende alle Standard-Backends. Die gesamte Prämisse von django-registration basiert auf dem is_active-Flag, d.h. es wird nur gesetzt, nachdem der Benutzer aktiviert wurde. Allerdings kann ich sehen, dass, wenn ein Benutzer sich anmeldet es django.contrib.auth.views.login verwendet. ich kann dies aus dem Code in auth_urls.py sehen.

Wenn sich ein Benutzer anmeldet, aber noch nicht aktiviert wurde, soll eine Meldung angezeigt werden, die in etwa lautet: "Sie haben Ihr Konto nicht aktiviert".

Derzeit ist das Standardverhalten, dass die Fehlermeldung des Formulars lautet: "Benutzername und Passwort stimmen nicht überein".

Ich verwende auch den Login-Dekorator in meinen Ansichten

@login_required

私の疑問は

EDIT : Danke James und Henry. Ich glaube, ich habe meine Fragen nicht sehr gut beschrieben. Ich habe das neu gemacht.

  1. In der Django-Dokumentation steht, dass is_active nicht als Determinante für die Anmeldung eines Benutzers verwendet wird. Dies ist ganz klar PAS den Fall. Versuchen Sie es selbst. Ich kann nicht herausfinden, wo das im Code passiert. Weiß das jemand? Soweit ich sehen kann, passiert es weder in django-registration noch in django.contrib.auth.
  2. Um die Fehlermeldung anzuzeigen, die ich oben beschrieben habe, was wäre der beste Weg für mich, dies zu tun? Bitte bedenken Sie, dass ich django-registration verwende und daher ein Großteil der Installationsarbeiten bereits erledigt ist. ich möchte dies nicht ändern oder alles neu schreiben. wenn möglich, suche ich nach einer.... "elegante" Lösung.

Vielen Dank im Voraus

in Bezug auf Q1,

5voto

w-- Punkte 6005

Vielen Dank an alle, die über diese Frage nachgedacht haben. Am Ende bemerkte ich einige html-Code in der Standard-Vorlage, die ich nicht bemerkt hatte, bevor.

{% if form.errors %}
<div class="error">
<p>Your username and password didn't match. Please try again.</p>
</div>
{% endif %}

Ich kam mir ziemlich dumm vor, nachdem ich das gesehen hatte. Ich hatte Code aus einem anderen Projekt kopiert und einfach angenommen, dass die Fehler dynamisch generiert wurden, anstatt hart kodiert zu sein.

Also begann ich zu recherchieren.

forms.errors 

und fand

forms.non_field_errors

und versucht, herauszufinden, wie man die Ausgabe zu gestalten (weil standardmäßig die dumme Sache es innerhalb html ul-Tags ausgibt) fand dies:

Django gibt Formularfehler als Tabellenzeilen in {{ form.as_table }} aus

Danke Chands (da die Antwort aus seiner Frage offensichtlich wurde)

Ein Kommentar. Die Dokumentation hierzu (zumindest für 1.1) lautet schrecklich . Warum ist dies nicht mehr explizit in offiziellen django docs ist mir ein Rätsel. scheint wie eine ziemlich grundlegende Sache, die man tun möchte.

0voto

James Khoury Punkte 19930

Ich denke, das Problem liegt in der django-Registrierung.

Siehe die Informationen in Zeile 132 von https://bitbucket.org/ubernostrum/django-registration/src/tip/docs/quickstart.rst

Es heißt, dass nicht aktive Benutzer nicht angemeldet werden können.

アップデイト

Sie können Ihr eigenes Backend schreiben oder das einfache Backend verwenden und Ihrem Profilmodell eine neue Eigenschaft namens activated . Das wäre eine Menge Arbeit.

Ich gehe davon aus, dass es sich um eine django.contrib.auth.views.login . Da ich nicht viel Zeit damit verbracht habe, es durchzusehen, denke ich, dass Sie es ziemlich einfach kopieren und Ihr eigenes erstellen können. (wenn es tatsächlich das Problem ist)

Sie müssen sie dann in der Datei auth_urls.py für die Login-URL ersetzen.

EDIT

Ich habe gerade die Doku 1.2 aufgerufen, um die Unterschiede zu überprüfen.

http://docs.djangoproject.com/en/1.2/topics/auth/#django.contrib.auth.models.User.is_active Sie werden sehen, dass das Formular den Test durchführt. Entweder hat es das schon immer getan, aber es war nicht richtig beschrieben, oder Sie haben auf 1.2 aktualisiert und es vergessen oder nicht gewusst.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X