我无法让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,
)
请帮忙!
答案 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