17

コントローラーアクションを@login_required装飾するデコレーターがあります。ただし、私のアプリは非常に大きく、多くの異なるコントローラー ファイルに大量のルートがあります。各ルートを 1 つずつ装飾するのは、エラーが発生しやすく (簡単に見落とす可能性があります)、時間がかかるようです。

アプリ全体ですべてのルートを一度に装飾する方法はありますか?

認証をWebサーバー(Apache)からアプリケーションレベルに移動しているため、この問題が発生しています。

4

1 に答える 1

23

逆に、before_requestデコレータを使用してデフォルトでログインを要求し、カスタム デコレータを使用してログインを必要としないルートにタグを付けることができます。次に例を示します。

_insecure_views = []

@my_blueprint.before_request
def require_login():
    if request.endpoint in _insecure_views:
        return
    # check for login here

def login_not_required(fn):
    '''decorator to disable user authentication'''
    endpoint = ".".join([some_blueprint.name, fn.func_name])
    _insecure_views.append(endpoint)
    return fn

@some_blueprint.route('/')
@login_not_required
def index():
    pass

おそらく、それを独自の派生ブループリント/Flask クラスにラップすることができます。

編集: 基本的に Flask-Login の login_required をデフォルトにする最良の方法

于 2015-12-08T20:03:24.390 に答える