用户似乎以另一个用户身份登录

时间:2014-10-31 05:56:33

标签: flask flask-login flask-security

我使用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):
    return {
        'user': self.current_user.email,
        'first_name': self.current_user.first_name,
        'last_name': self.current_user.last_name,
        'phone_number': self.current_user.phone_number,
}

执行此API请求代码时会调用此方法:

    class CurrentUser(restful.Resource):
     def get(self):
         return json_response(g.user_service.current_user_get_info())

1 个答案:

答案 0 :(得分:2)

我发现了这个问题,并在此处发布给可能遇到同样问题的其他人。

事实证明,访问我网站的用户背后是带有代理的VPN。代理正在缓存页面以及用户的cookie。当一个用户发出请求时,代理会将页面与该用户的cookie一起缓存在标题中。在下一个用户的请求中,代理将使用第一个用户的cookie回送页面,因此第二个用户会发现自己是其他人。

有关详细信息,请参阅此处: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