我有一个使用Beaker加密cookie会话的Pyramid应用程序。我可以使用RequestWithUserAttribute,pyramid.security.authenticated_userid(),remember()和forget()来记录用户。
但是,大多数用户永远不会登录,并且有一个特定值我想保存在用户提供的cookie中(如果可能的话加密)(他们的位置或任何字符串)就此而言)。
我无法发现如何使用remember()函数为会话设置多个主体,我不想发送自己的Set-Cookie标头,更不用说自己处理数据加密了。 / p>
我发现你可以将关键字参数传递给remember():
remember(request, principal, *kw)
但是当我尝试发送任何额外的值时,我不断遇到错误。
理想情况下,我会期待这样的事情:
remember(request, 'public', {'location':request.params.get('location')})
这甚至是正确的路线吗?
答案 0 :(得分:3)
金字塔中的会话和身份验证(以及一般情况下)是不相交的概念。有很多人学习了如何存储经过身份验证的用户“在会话中”,但这绝不是一个要求。会话的重点是跨请求将访问者的任意数据存储到您的站点。这可能是他们登录的事实,也可能是你的随机字符串。
关键是你可以在会话中存储随机内容。它可以通过request.session
直接在请求对象上的金字塔中(在Configurator上设置session_factory之后)。
request.session['mykey'] = 'some random value'
这不要求您使用身份验证,记住/遗忘或会话工厂以外的任何其他内容。
https://docs.pylonsproject.org/projects/pyramid/en/1.2-branch/narr/sessions.html