我正在使用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] 删除。
我来说两句