class User(peewee.Model):
login = peewee.TextField(unique=False)
token = peewee.TextField()
我的路线
@app.route('/callback')
def finishlogin():
# I've verified that `token` and `login` are both valid at this point
user = User.create(login=login, token=token)
session['token'] = token
return redirect(url_for('home'))
如下:
home
到目前为止,一切都很好。但是,我正在体验用户登录,刷新页面并发现他们突然作为其他人登录的实例。将请求记录到该应用,因此在设置不同客户端和请求之间的会话时似乎存在一些“泄漏”。 我不确定问题是什么。我的数据库如
@app.route('/')
def home():
if 'token' in session:
user = User.get(token=session.get('token'))
return 'Your login is {}'.format(user.login)
else:
# ...
session.get('token')
对象上,并设置了home()
和
g
挂钩,以打开和关闭数据库连接,以及我所读过的所有文档和示例代码(而且我已经读了很多!),我似乎正在正确使用会话对象。我已经为会话商店设置了一个工作peewee
。
我想知道这可能是Heroku和他们的路线网的情况吗?但是,一个用户如何突然发送另一个用户的会话?
任何提示或建议都会不胜感激 - 我已经盯着这个问题了很长时间,并处于我的智慧。
[1]我知道直接存储令牌是一个不好的设计选择。该应用程序是非公共的,这将是解决的,但是现在我想描述它的存在,即使它不是理想的。提出我自己的问题以备将来参考。 这似乎是由烧瓶的默认会话cookie行为引起的,即使对于静态资产,也要发送带有单个请求的标题。因此,我们当地的鱿鱼代理很乐意缓存这些请求,并为每个用户重新发出
before_request
标题。 整个应用程序的标题似乎解决了问题。
整个应用程序的设置缓存控制标头似乎解决了问题。这也适用于Micropie。