web-dev-qa-db-ja.com

ユーザーがデコレータなしで認証された場合のFlask-Loginチェック

Flask-Loginのドキュメントから、システムのユーザーがデコレータ構文を利用するメソッドにアクセスするために認証済みのユーザーモデルを要求する方法について説明されています。

from flask_login import login_required    

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

これですべてうまくいきましたが、ユーザーが次のようなメソッドにログインしているかどうかを調べたいと思います。

@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
    ...

この理由は、認証されたユーザーと認証されていないユーザーのルートを複製するのではなく、GETおよびPOSTリクエストを分解するためです。
これどうやってするの?出来ますか?

32
Ospho

これはフラスコでは非常に簡単です:

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")

匿名ユーザーに関するドキュメント を参照してください。

50
codeape

here を参照できます。

ユーザーがログインしたら、session['logged_in']=True。同時に、Flask-login APIを使用して、その機能を使用する場合にいくつかの設定を行うことができます。
Flask-login APIを使用するのではなく、ユーザーが手動でログインしたかどうかを確認する場合は、session['logged_in']

1
flyer