用户似乎以其他用户身份登录

我正在使用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):
    返回{ 
        '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())

我发现了这个问题,并在这里张贴给可能有同样问题的其他人。

事实证明,访问我的站点的用户位于具有代理的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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章