2016-12-21 14 views
0

私は、この状況を適切に実装する方法を教えてくれることを期待しています。ユーザーごとのPythonフラスコセッションとそのオブジェクト

私は複数の同時ユーザー用のフラスコアプリを構築しています。このアプリは本質的に認証を必要とするバックエンドのRESTfulサービスをラップし、コマンドの送信を許可します。ユーザーはフラスコアプリ自体にログインする必要はありませんが、Restfulサービスへのオブジェクトの認証に使用する認証情報を提供します。そのため、各ユーザーはそれぞれのセッションに固有のオブジェクトを必要とします。使いやすさ/怠惰のために、私はいくつかの簡単な情報をいくつかの変数に保存しています(session['x'])。

セッション情報は各ユーザーに一意ではなく、「ログイン」する最後のユーザーが以前のユーザーの認証オブジェクトを壊すように見えます。

これを構築する適切な方法は何ですか? session変数をオブジェクトに移動することはできますが、それでもすべてのユーザーが独自のバックエンドオブジェクトを必要とするという問題が残ります。真のフラスコログインを実装する必要がありますか?

+1

コードを表示する必要があります。リクエスト間で認証オブジェクトをどのように保持しているのかよく分かりません。セッションに格納していますか?あなたがしなければならないことは、セッションからのユニークなデータに応じて、リクエストごとにそれを再作成することです。 –

+0

私はオブジェクトをアプリケーション全体でグローバル変数として永続化しました。 (私が知っているのは悪いです)。私はむしろ時間のかかる高価なものであるため、すべての要求を再認証したくないでしょう。私はオブジェクトを 'session'に永続化することはできないので、これが本当の問題だと思います。すなわち、ユーザセッションごとにオブジェクトを永続化する方法です。 – KHibma

+0

さて、私はあなたができる方法を見ていない。ユーザー固有のものを格納する場所は、セッションまたはdbに限られます。しかし、これがREST APIの場合、おそらく毎回再認証する必要はなく、トークンを受け入れるOAuthのようなものを使用していると考えられます。 –

答えて

1

これまで、ログインとセッション管理システムを実装するために、私はこれまでにflask-loginの拡張機能を使用していました。

セッションのようなPythonオブジェクトにユーザー情報を格納する際の1つの問題は、アプリケーションを1つのプロセスを超えて拡大縮小できないことです。ほとんどの場合、複数のプロセスが要求を処理する必要があります。各プロセスは独自のPythonインタプリタで実行され、セッションオブジェクトを共有しません。セッション情報を保存するために、すべてのプロセスで共有されるデータベースが本当に必要です。あなたはuser classと二つの機能(最高のユーザークラスのメソッドとして実装)を実装する必要がありフラスコ-ログインの

  • あなたのサービスに対して提供されたユーザ名とパスワードを認証するログイン機能をとセッションIDとして使用するためにcryptographically secure pseudo-random number generator(すなわちos.urandom())を使用して大きな乱数(16-32バイト)を生成します。生成されたセッションIDを、セッションテーブルまたはデータベース内のユーザーのセッション情報のキーとして、またユーザークラスのIDとして使用します。ログイン関数はUserオブジェクトを返す必要があります。私は通常、それをUserクラスのクラスメソッドとして実装します。上記の関数で生成されたセッションIDを取り、あなたのユーザーがあなたのセッション情報を格納しているデータベースからの情報が取り込ま表すクラスを返します

  • load_userコールバック

フラスコ-ログインが処理されますユーザーのコンピュータにセッションIDをクッキーとして安全に保存し(HMACとして)、リクエストの開始時にload_userコールバックを呼び出してユーザーの情報を取得します。ログインしたユーザーの情報は、flask_login(from flask_login import current_user)からcurrent_userプロキシをインポートすることで利用できます。このオブジェクトは、jinjaテンプレートでも使用できます。

+0

ありがとう、私はこれを実装することができるかどうかを確認するためにカップル日が必要になります。 – KHibma

+0

ご質問がある場合はお知らせください。 – edrw

関連する問題