【问题标题】:Why does my app give me 404 when I add a permission but not w/o one?为什么当我添加权限时我的应用程序给我 404 但没有权限?
【发布时间】:2018-06-06 10:24:05
【问题描述】:

由于某种原因,如果我在登录后被我的应用程序重定向,如果我有附加到该视图的权限,但如果我删除该权限,一切都很好。我正在使用 AuthTktAuthenticationPolicy 并且我已经尝试添加以下回调:

def principalFinder(username, request):
    return [Authenticated]

但这并没有改变任何东西。这是有问题的观点:

@view_config(route_name='test', context=myAERO, permission='editAln')
def test(request):
    return Response(request.authenticated_userid)

如您所见,它使用 myAERO 类作为其上下文:

class myAERO():
    __acl__ = [
    (Allow, Authenticated, 'editAln')
    ]
    def __init__(self, request):
        self.request = request

现在,身份验证似乎没有问题,因为如果我从 @view_config() 装饰器中删除 permission='editAln' ,我的应用确实会显示返回我用来登录的用户名。

我对此感到非常困惑。我可以理解得到一个 403 禁止,但我就是不明白为什么我一直得到一个 404 状态码!我发现this question 似乎有些相关,但正如您所见,我根本没有使用 name 属性,所以它并没有真正帮助我。这是我第一次使用 Pyramid,在我看来,我试图用我的应用程序完成的事情(使用基于经过身份验证的用户的用户名的 JSON 响应来响应 XHR POST 请求)不应该那么难,所以我希望有人稍微多一点 Pyramid 的经验可以帮助我理解这一点。

【问题讨论】:

    标签: python-3.x authentication authorization http-status-code-404 pyramid


    【解决方案1】:

    我通过将 myAERO 类设置为根工厂而不是将其设置为每个单独视图的上下文来解决了这个问题。我从Michael Merickel's auth demo 得到了这个想法。坦率地说,我不知道为什么会这样,所以仍然非常感谢您解释原因的评论。

    编辑:在做了更多阅读之后,在我看来,它与整个 URL Dispatch vs Traversal 有某种关系,我目前仍在努力掌握。

    【讨论】:

      猜你喜欢
      • 2015-12-08
      • 1970-01-01
      • 2020-01-25
      • 1970-01-01
      • 1970-01-01
      • 2022-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多