Ich baue eine Flask-App, die Stormpath und Flask-Stormpath für auth verwendet. Ich möchte verhindern, dass ein eingeloggter Benutzer auf die Seiten/login oder/register zugreift (da dies wenig Sinn macht - ein angemeldeter Benutzer muss sich nicht anmelden und Sie sind per Definition registriert, wenn Sie bereits eingeloggt sind). Ich habe eine Lösung in meiner benutzerdefinierten Login-Seite Vorlage versuchte, etwas entlang der Linien zu tun:Wie kann man angemeldete Benutzer daran hindern, mit Flask-Stormpath auf Login-/Registerseiten zuzugreifen?
{% block page_heading %}
{% if user.given_name %}
Already Logged in as {{ user.given_name }}
{% else %}
Enter your credentials
{% endif %}
{% endblock page_subheading %}
Wenn ein Benutzer zur Zeit angemeldet ist, wird user.given_name definiert werden und der page_heading Block der ‚nimmt bereits angemeldet in 'Nachricht' und andernfalls 'Nachricht eingeben' (im Normalfall, wenn ein nicht authentifizierter Benutzer versucht, sich anzumelden). Ich benutze das gleiche Konstrukt, um das Login-Formular oder mehr Fehlertext anzuzeigen. Dieser Versuch funktioniert jedoch nicht: es ist so, als ob benutzer.given_name immer auf undefiniert zurückkehrt, wenn ein angemeldeter Benutzer sich anmeldet/anmeldet. Dies bedeutet, dass, wenn jemand eingeloggt ist und sich anmeldet, sie abgemeldet werden - dies würde den Fehler meines Lösungsversuchs erklären.
Angesichts der oben genannten und nach Konsultation der Dokumente, könnte ich in der Lage sein zu verwenden is_authenticated(); nicht durch Flask-Stormpath, sondern durch das zugrundeliegende Flask-Login-Modul, da Flask-Stormpath dies immer auf True setzt, nach den Dokumenten, aber ich habe keine Ahnung, wie ich das anstellen soll.
Darüber hinaus ist mein Ansatz hacky - ich denke, eine bessere Lösung würde in der Python-Seite der App liegen.
Also meine Frage ist das: Was ist die sinnvollste Art und Weise zu erkennen, ein Benutzer ist angemeldet und damit verhindert, dass sie auf die/Login und/Register-Seiten zugreifen oder umleiten sie? Vielleicht gibt es einen magischen Dekorateur irgendwo, dass das Gegenteil
@login_required
oder ein stormpath eingebauten ‚unerlaubt‘ Gruppe
ist, dass ich wie in@groups_required(['unauthorised'])
verwenden könnte Oder vielleicht habe ich auf dem rechten Seite war Linien mit meinem ursprünglichen Versuch.
Jede Hilfe ist willkommen :)
Update: Ich habe gerade versucht, meinen ursprünglichen Ansatz (die Vorlage basierende Lösung) mit der/Registerseite und bekam die gewünschtes Verhalten. Die Dinge funktionieren immer noch nicht für/login. Es wird immer wahrscheinlicher, dass wenn ein angemeldeter Benutzer sich anmeldet/anmeldet, diese abgemeldet werden und dann die Anmeldeseite angezeigt wird. Nicht sicher, wie man damit umgeht –