2016-12-14 13 views
3

私は認証にFlask-HTTPAuthを使用しています。私は、要求が認証されたかどうかに応じて、ビューから異なるデータを表示したいと思います。 auth.login_requiredでビューを装飾すると、認証されたユーザーにのみ表示されます。リクエストがFlask-HTTPAuthで認証されたかどうかをテストするにはどうすればよいですか?ビュー内でFlask-HTTPAuthが認証されていることを確認してください

auth = HTTPBasicAuth() 

@app.route("/clothesInfo") 
@auth.login_required 
def show_info(): 
    return jsonify(blah blah blah) 
+1

あなたは、ユーザーが認証された場合の情報が含まれているテンプレートに渡されたオブジェクトが必要として、あなたはフラスコ-httpauthでこれを行うことができれば、私は知りません。私はあなたが間違いなく[Flask-Login](https://flask-login.readthedocs.io/en/latest/)でこれを行うことができることを知っています。こちらをご覧くださいhttp://stackoverflow.com/questions/18361151/using-flask- login-session-with-jinja2-templates – MrLeeh

答えて

3

実際に実装するのは非常に簡単です。 verify_passwordコールバックでは、ユーザーが資格情報を入力しないと、ユーザー名とパスワードが''に設定されます。その関数からまだTrueを返すことができ、匿名ユーザーがエンドポイントにアクセスできるようになります。

次の例では、この手法を示しています。

auth = HTTPBasicAuth() 

@auth.verify_password 
def verify_password(username, password): 
    if username == '' or password == '': 
     # anonymous user, we still let them in 
     g.current_user = None 
     return True 
    g.current_user = my_verify_function(username, password) 
    return g.current_user is not None 

@app.route("/clothesInfo") 
@auth.login_required 
def show_info(): 
    if g.current_user: 
     # prepare data for authenticated users here 
     pass 
    else: 
     # prepare data for anonymous users here 
     pass 
    return jsonify(data) 
3

フラスコ-HTTPAuth有効な認証が提供された場合だけでチェックする方法を持っていない、あなたが(ビュー)機能を飾るために持っています。 Noneを返す関数をlogin_requiredで飾ることができます。認証されていないときに呼び出すとエラー応答が返され、認証されている間に呼び出すとNoneが返されます。

# a dummy callable to execute the login_required logic 
login_required_dummy_view = auth.login_required(lambda: None) 

def is_authenticated(): 
    try: 
     # default implementation returns a string error 
     return login_required_dummy_view() is None 
    except HTTPException: 
     # in case auth_error_callback raises a real error 
     return False 

@app.route('/info') 
def info(): 
    if is_authenticated(): 
     # logged in view 

    else: 
     # basic view 

Default login_required rather than adding decorator everywhereも参照してください。

+0

ちょっと、@ダビデ。私の答えを見て、Flask-HTTPはOPが求めていることをサポートしています。検証コールバックは、クライアントが 'Authorization'ヘッダを送らないときにも呼び出されるので、クライアントを許可するオプションがあります。 – Miguel

+0

@Miguel oh duh、それは意味があります。 – davidism

関連する問題