コントローラーアクションを@login_required装飾するデコレーターがあります。ただし、私のアプリは非常に大きく、多くの異なるコントローラー ファイルに大量のルートがあります。各ルートを 1 つずつ装飾するのは、エラーが発生しやすく (簡単に見落とす可能性があります)、時間がかかるようです。
アプリ全体ですべてのルートを一度に装飾する方法はありますか?
認証をWebサーバー(Apache)からアプリケーションレベルに移動しているため、この問題が発生しています。
コントローラーアクションを@login_required装飾するデコレーターがあります。ただし、私のアプリは非常に大きく、多くの異なるコントローラー ファイルに大量のルートがあります。各ルートを 1 つずつ装飾するのは、エラーが発生しやすく (簡単に見落とす可能性があります)、時間がかかるようです。
アプリ全体ですべてのルートを一度に装飾する方法はありますか?
認証をWebサーバー(Apache)からアプリケーションレベルに移動しているため、この問題が発生しています。
逆に、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 クラスにラップすることができます。