8

私はフラスコを初めて使用しますが、Python にはある程度習熟しています。ユーザー認証にフラスコ セキュリティを使用するフラスコ アプリを持っています。ユーザーのログイン プロセスにいくつかの機能を追加したいと考えています。具体的には、ユーザーがログインするときにユーザーの auth_token (1 回限りのトークンになるように設定した) をデータベースに保存し、ログアウトするときにそれを削除する必要があります。この問題は、flask-security が (私の知る限り) ログインの仕組みを開発者に直接公開していないために発生します。コードからわかる限り、login_user 関数を使用するフラスコ ログインをインポートします。

まず、flask.ext.login をインポートして (通常は必要ありません)、次のように関数を再定義して、この関数をオーバーライドしようとしました。

import flask.ext.login as a
def new_login_user():
    ...copy of existing function goes here...
    ...Plus new stuff with current_user.get_auth_token()...
a.login_user = new_login_user

しかし、私はあらゆる種類の名前空間の問題に見舞われました。それは本当に醜い方法のようです。

デコレータでそれを行う方法があるかもしれないと思っていましたが、私はフラスコが初めてで、デコレータをあまり使用していません。

これにアプローチする最善の方法についてのアイデアはありますか? コンテキストとして、データベースに auth_token が必要です。これは、Web サイトの認証を、データベースにもアクセスする別のプロセスに渡す必要があるためです。もう 1 つのプロセスは、websocket を使用する API サーバーです。プロセスを結合したくありません。

4

2 に答える 2

6

シグナル デコレーターを使用するのが最も簡単だと思います。次の例on_user_logged_inでは、ユーザーがアプリにログインしたときに呼び出す必要があります。詳しくはドキュメントをご覧ください。

from flask.ext.login import user_logged_in

@user_logged_in.connect_via(app)
def on_user_logged_in(sender, user):
    log_auth_token(user.get_auth_token()) # or whatever.
于 2014-08-04T14:31:19.013 に答える