5

私はFlask-LoginとFlask-Principalを使用してFlaskアプリに取り組んでおり、Flask-Loginの記憶機能を除いて、これまでのところすべて正常に動作しています。

実際には、Flask-Login 側で記憶機能が機能しますが、Flask-Principal の identity_loaded 関数はトリガーされません。

@login_manager.user_loader と @identity_loaded.connect の呼び出しをログに記録すると、ログイン時に両方が呼び出されますが、ブラウザーを閉じて再度起動すると、@login_manager.user_loader だけが呼び出されます。したがって、ユーザーは基本的にログインしますが、ロールは取得しません。

Flask-Login は GitHub でクローズ済みの問題 #19を持っていますが、実際には私の質問には答えていません :-/

ユーザーが Cookie から読み込まれたときにどのように反応するか考えている人はいますか?

4

1 に答える 1

4

before_request で、flask-principalID が見つかるまで一度に 1 つずつ identity_loaders を実行します。ID が見つからない場合は、identity_loaded呼び出されません。

最初の identity_loader は、デフォルトでは常にセッション ローダーです。

ブラウザーを再起動すると、セッションが失われるためflask-principal、ID を読み込めないため、identity_loadedコールバックは呼び出されません。flask-loginしかし、の Cookie 'remember_token' は 31 日後に有効期限が切れるため、あなたはまだログインしています。

したがって、この特異性を取り除くためにidentity_loader、セッションの有効期限が切れたときにのみ実行される new を追加できます。

principal = Principal(app)

@principal.identity_loader
def load_identity_when_session_expires():
    if hasattr(current_user, 'id'):
        return Identity(current_user.id)
于 2014-07-28T19:01:05.043 に答える