Pyramid authn和authz:'logout'的奇怪行为

时间:2013-04-16 06:06:16

标签: python authentication authorization pyramid

登录效果很好,我的logout_view:

@view_config(route_name='logout')
def logout_view(request):
    headers = forget(request)
    raise HTTPFound(location='request.application_url',headers=headers)

我得到的输出:

AttributeError: 'NoneType' object has no attribute 'name'
 (in template single.pt LINE 11: "<p tal:content="result.name"></p>")

似乎,

  1. forgetHTTPFound根本没有被调用,因为浏览器停留在“0.0.0.0:6543/logout,说内部服务器错误
  2. logout_viewsingle.pt模板无关,但似乎single.pt在某处呈现。
  3. 顺便说一句,single.pt模板仅用于与rst_view相关联的config.add_route('rst', '/{id}')以下内容:

    @view_config(route_name='rst', renderer='templates/single.pt',
                 permission='edit',)
    def rst_view(request):
        rstId=request.matchdict['id']
        rst=DBSession.query(Rst).get(rstId)
        return {
        'result':rst,
        'logged_in':authenticated_userid(request),
    }
    

    请帮忙。

1 个答案:

答案 0 :(得分:2)

看起来您的路线排序混乱,/{id}/logout之前匹配,有效地隐藏了它。将您的add_route次呼叫撤消到该登出首先匹配。