金字塔中的身份验证问题(记住+ authenticated_userid)

时间:2011-03-24 12:58:42

标签: python authentication pyramid

我无法让Pyramid的基本身份验证机制为我工作。我做错了吗?

要进行调试,我在我的一个视图中运行了这段代码:

print '$$$1', pyramid.security.remember(request, 12)
print '$$$2', pyramid.security.unauthenticated_userid(request)
print '$$$3', pyramid.security.authenticated_userid(request)

这是我得到的输出:

  

$$$ 1 [('Set-Cookie','auth_tkt =“45a66a6e860356b991cc8fc8acf9bf7f4d8b3d2212!userid_type:int”; Path = /'),('Set-Cookie','auth_tkt =“45a66a6e860356b991cc8fc8acf9bf7f4d8b3d2212!userid_type:int”; Path = /; Domain = 127.0.0.1:6543'),('Set-Cookie','auth_tkt =“45a66a6e860356b991cc8fc8acf9bf7f4d8b3d2212!userid_type:int”; Path = /; Domain = .127.0.0.1:6543')]

     

$$$ 2无

     

$$$ 3无

我确实有request.session为我工作,所以我猜测问题不在于cookies。

以下是我在__init__配置金字塔时使用的代码:

authn_policy = AuthTktAuthenticationPolicy( 'secret', callback=lambda x:[])
engine = engine_from_config(settings, 'sqlalchemy.')
initialize_sql(engine)
my_session_factory = UnencryptedCookieSessionFactoryConfig('anothersecret')
config = Configurator(settings=settings, session_factory=my_session_factory,
                      authentication_policy=authn_policy,
        )

请帮忙!

2 个答案:

答案 0 :(得分:4)

“记住”只返回标题。您需要将这些标头设置为响应。另请参阅this section of Adding Authorization docs,特别是第21行和第21行中正下方的代码示例。 22。

答案 1 :(得分:1)

你可能犯了同样的错误,我在阅读教程时声明group_finder / only /返回其他组。这不是这里引用的情况:http://plope.com/pyramid_auth_design_api_postmortem

如果使用回调函数,必须仅在用户无效时返回None。教程的示例将为不在枚举用户中的任何用户返回none(即使您通过其他机制对用户进行身份验证)。在我自己的代码中,我明确地返回一个空列表([]),用于尚未处于记忆列表/组中的用户的情况。这样,我有三种类型的访问级别:公共,经过身份验证,基于组的权限。

除教程的示例外,还有一组菜谱条目: http://docs.pylonsproject.org/projects/pyramid_cookbook/dev/authentication.html