web-dev-qa-db-fra.com

Vérification de la connexion de la fiole si l'utilisateur est authentifié sans décorateur

À partir des documents Flask-Login, il est décrit comment un utilisateur du système peut exiger un modèle utilisateur authentifié pour accéder à une méthode utilisant la syntaxe du décorateur:

from flask_login import login_required    

@app.route("/settings")
@login_required
def settings():
    pass

C'est très bien maintenant, mais je veux pouvoir examiner si l'utilisateur est connecté dans une méthode, quelque chose comme ceci:

@app.route('/main/', methods=['GET', 'POST'])
main_route():
    if request.method == 'GET':
         if user_is_authenticated():    #Do the authentication here
             #load authenticated /main/ html template etc.
             pass
         else:
             #load unauthenticated /main/ html template etc.
             pass
    ...

La raison en est que cela factorise les requêtes GET et POST plutôt que de dupliquer les routes pour les utilisateurs authentifiés et les utilisateurs non authentifiés.
Comment puis-je faire ceci? C'est possible?

32
Ospho

C'est très simple en flacon:

from flask_login import current_user

@app.route(...)
def main_route():
    if current_user.is_authenticated:
         return render_template("main_for_user.html")
    else:
         return render_template("main_for_anonymous.html")

Voir la documentation sur les utilisateurs anonymes .

50
codeape

Vous pouvez vous référer à l'exemple ici .

Une fois l'utilisateur connecté, définissez session['logged_in']=True. Dans le même temps, vous pouvez utiliser l'API de connexion Flask pour effectuer certaines configurations au cas où vous souhaiteriez utiliser ses fonctionnalités.
Lorsque vous souhaitez vérifier si l'utilisateur s'est connecté manuellement plutôt que d'utiliser l'API de connexion Flask, vérifiez la valeur de session['logged_in'].

1
flyer