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,
        'phone_number': self.current_user.phone_number,
}

这在执行此 API 请求代码时调用:

    类 CurrentUser(restful.Resource):
     定义获取(自我):
         返回 json_response(g.user_service.current_user_get_info())
4

1 回答 1

7

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

事实证明,访问我网站的用户是在带有代理的 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
于 2014-11-08T02:46:11.353 回答