2016-04-26 13 views
1

ich zur Zeit Code hier bin mit:erfordern neue Login für jede Seite Ansicht

http://flask.pocoo.org/snippets/8/

Und ich dekorieren dementsprechend meine Funktion des Admin beglaubigen zu haben, wenn eine bestimmte Admin-Seite anfordert. Anstatt jedoch zu verlangen, dass der Administrator sich bei jeder Admin-Seite authentifiziert, bemerkte ich, dass er die Sitzung irgendwie verfolgt und nach einmal erfolgreicher Authentifizierung keine Authentifizierung mehr benötigt. Gibt es eine Möglichkeit, Flask zu zwingen, sich jedes Mal neu zu authentifizieren, wenn ein Administrator die angegebene eingerichtete Admin-Seite anfordert?

+2

Warum möchten Sie, dass sich jeder für jede Seitenansicht erneut anmeldet? – CodeLikeBeaker

+0

Nein, du hast es falsch verstanden. Stellen Sie es sich als Admin-Seite für Administratoren vor. Nur eine einzige Seite erfordert Authentifizierung für den Zugriff auf etwas, für das erhöhte Berechtigungen erforderlich sind. Alle anderen Seiten benötigen keine Authentifizierung – slaw

+0

werfen Sie einen Blick auf die Antwort, die ich zur Verfügung stellen, ich glaube, das ist, was Sie suchen. – CodeLikeBeaker

Antwort

0

Mithilfe des enthaltenen Snippets können Benutzer nicht jedes Mal, wenn sie die angegebene Seite anfordern, gezwungen werden, sich anzumelden.

Dies liegt daran, dass das Snippet HTTP Basic Auth verwendet und es keine gute Möglichkeit gibt, den Browser anzuweisen, den Header nicht mehr zu senden.

0

Was Sie suchen, kann mit einem benutzerdefinierten Dekorateur getan werden. Sie können das Beispiel unten verwenden. Beachten Sie, dass Ihr Fall anders aussieht, aber Sie können dies als Leitfaden verwenden.

from web import app, has_role 

@app.route("/admin/my_page") 
@login_required 
@has_role(role="admin") 
def admin_my_page(): 
    //do stuff 

Dann in Ihrem Projekt init oder eine Include-Datei können Sie fügen Sie folgendes:

def has_role(role=None): 
    def _initial_decorator(view_func): 
     def _decorator(*args, **kwargs): 
      response = view_func(*args, **kwargs) 
      if g.user.user_level != role: 
       from flask import redirect, url_for 

       return redirect(url_for("no_access")) 
      return response 

     return wraps(view_func)(_decorator) 

    return _initial_decorator 

Dies sollten Sie bei Leasing geben eine Vorstellung davon, wie eine benutzerdefinierte Dekorateur, erstellen und dann prüfen, für Rollenberechtigungen. Sie können dies beliebig erweitern. Sie können Motorlogik oder andere Prüfungen an Ihr Projekt anpassen.

+0

Ich sehe nicht, wo die Authentifizierung in Ihren Code kommt. Darüber hinaus, wie Sie den Browser zwingen, die Authentifizierung in der Kopfzeile zu vergessen. – slaw

+0

@slaw Die Authentifizierung kommt mit der has_role. Grundsätzlich überprüfen Sie, ob der Benutzer, der bereits angemeldet ist, eine bestimmte Rolle hat. Wenn Sie über eine vollständige separate Anmeldeseite sprechen, können Sie den obigen Code weiterhin verwenden, aber statt nach Rollen zu suchen, können Sie nach einer Sitzungsvariablen suchen und dann zu einem LoginManager umleiten: https: // flask-login. readthedocs.io/de/latest/ – CodeLikeBeaker