6

Flask-Security を使用してユーザーを管理しています。ユーザーが自分自身として正常にログインしているというレポートを受け取っていますが、ページをロードするとランダムに、まったく別のユーザーとしてログに記録されていることが示されます。どこが間違っているのかわかりません。これが起こる可能性のある方法は何ですか?

UserService を使用して簡単なユーザー管理を行います。すべてのリクエストの前にユーザー サービスをインスタンス化し、current_user に渡します。

@app.before_request
def load_request_services():
    g.user_service = UserService(user_datastore, application_service, email_service, ORGS, current_user)

次に、このメソッドから UserService の現在のユーザーを取得します。

def current_user_get_info(self):
    戻る {
        「ユーザー」: self.current_user.email,
        'first_name': self.current_user.first_name,
        「last_name」: self.current_user.last_name、
        「電話番号」: self.current_user.phone_number,
}

これは、この API リクエスト コードが実行されると呼び出されます。

    クラス CurrentUser(restful.Resource):
     デフゲット(自己):
         return json_response(g.user_service.current_user_get_info())
4

1 に答える 1

7

私は問題を発見し、同じ問題を抱えている可能性のある他の人のためにここに投稿しています。

私のサイトにアクセスしていたユーザーは、プロキシを使用した VPN の背後にいたことが判明しました。プロキシは、ユーザーの Cookie と一緒にページをキャッシュしていました。1 人のユーザーが要求を行うと、プロキシはそのユーザーの Cookie と共にページをヘッダーにキャッシュします。次のユーザーのリクエストで、プロキシは最初のユーザーの Cookie を含むページを返します。したがって、2 番目のユーザーは別のユーザーとして認識されます。

詳細については、こちらを参照してください: https://code.google.com/p/doctype-mirror/wiki/ArticleHttpCaching

プロキシがキャッシュしようとしないように、キャッシュ制御 HTTP ヘッダーを「プライベート」に設定することで解決しました。Flask では、次のようになります。

@app.after_request
def add_header(response):
    response.cache_control.private = True
    response.cache_control.public = False
    return response
于 2014-11-08T02:46:11.353 に答える