À 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?
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")
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']
.