我使用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())
答案 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