Php Symfony2:在检查路由之前检查身份验证

Php Symfony2:在检查路由之前检查身份验证,php,symfony,Php,Symfony,目前我正在开发一个受限API。如果用户未经身份验证,则所有路由(无论是否存在)都应返回401。不幸的是,我只有在路线存在的情况下才能拿到401。如果它不存在,我会得到404 在检查路由之前,是否有方法检查身份验证?可能是通配符路由?听起来这是正确的行为-即,如果路由不存在,它应该返回404。。。也许可以解释一下为什么你总是想要返回401。使用API的客户端不应该检查404吗? 抱歉,我想发表评论,但还没有足够的声誉来发表评论 听起来这是正确的行为-即,如果路由不存在,它应该返回404。。。也许可

目前我正在开发一个受限API。如果用户未经身份验证,则所有路由(无论是否存在)都应返回401。不幸的是,我只有在路线存在的情况下才能拿到401。如果它不存在,我会得到404


在检查路由之前,是否有方法检查身份验证?可能是通配符路由?

听起来这是正确的行为-即,如果路由不存在,它应该返回404。。。也许可以解释一下为什么你总是想要返回401。使用API的客户端不应该检查404吗?
抱歉,我想发表评论,但还没有足够的声誉来发表评论

听起来这是正确的行为-即,如果路由不存在,它应该返回404。。。也许可以解释一下为什么你总是想要返回401。使用API的客户端不应该检查404吗?
抱歉,我想发表评论,但还没有足够的声誉来发表评论

您可以尝试匹配任何路线,例如:

any_route:
    path:     /{anyparams}
    defaults:
        _controller: YourProjectBundle:Index:anyroute
    requirements:
        anyparams: ".+"
但要确保在最后定义了


因此,“不存在”路由现在存在并将抛出401错误

您可以尝试匹配任何路由,例如:

any_route:
    path:     /{anyparams}
    defaults:
        _controller: YourProjectBundle:Index:anyroute
    requirements:
        anyparams: ".+"
但要确保在最后定义了



因此,“不存在”路由现在存在,并将抛出401错误

A可能会起作用。您可以检查请求是否包含任何身份验证头,否则抛出401响应。是的,但如果我在不存在的路由上检查身份验证,这将返回500。请参阅以下消息:“令牌存储不包含身份验证令牌。一个可能的原因可能是没有为此URL配置防火墙”(刚刚测试过它;)。我很困惑。您的问题表明,如果路线不存在,您将获得404。你的评论是500。差别很大。是哪一个?也许可以澄清一下你的问题。如果我按照Oldskool的建议使用EventListener,它将返回500!这是糟糕的应用程序设计。不要这样做。您的行为意味着应用程序中的每个请求的资源都存在。因此,当我请求时,例如:
/api/fake
-我将收到401代码,相应地,如果我登录,我希望收到此资源的一些OK代码。但我会收到404。让它变得简单和更清晰(与预期的行为)。A可能会做到这一点。您可以检查请求是否包含任何身份验证头,否则抛出401响应。是的,但如果我在不存在的路由上检查身份验证,这将返回500。请参阅以下消息:“令牌存储不包含身份验证令牌。一个可能的原因可能是没有为此URL配置防火墙”(刚刚测试过它;)。我很困惑。您的问题表明,如果路线不存在,您将获得404。你的评论是500。差别很大。是哪一个?也许可以澄清一下你的问题。如果我按照Oldskool的建议使用EventListener,它将返回500!这是糟糕的应用程序设计。不要这样做。您的行为意味着应用程序中的每个请求的资源都存在。因此,当我请求时,例如:
/api/fake
-我将收到401代码,相应地,如果我登录,我希望收到此资源的一些OK代码。但我会收到404。我想返回404,但前提是用户经过身份验证。为了澄清:未验证,路由存在=>401;未验证,路由不存在=>401;已验证,路由存在=>200(或其他);已验证,路由不存在=>404是的,我理解。。。我只是想知道为什么你不能在一条不存在的路线上返回404。针对不可用的路由进行身份验证似乎没有多大意义……客户希望它是一个超级受限API。在没有身份验证的情况下,您不允许获取有关API的任何信息。好的,在这种情况下,您可以按照上面的建议使用事件侦听器,并检查请求头以进行身份验证…此外,我最近一直在使用Guard,非常喜欢它。。。我想返回404,但前提是用户经过身份验证。为了澄清:未验证,路由存在=>401;未验证,路由不存在=>401;已验证,路由存在=>200(或其他);已验证,路由不存在=>404是的,我理解。。。我只是想知道为什么你不能在一条不存在的路线上返回404。针对不可用的路由进行身份验证似乎没有多大意义……客户希望它是一个超级受限API。在没有身份验证的情况下,您不允许获取有关API的任何信息。好的,在这种情况下,您可以按照上面的建议使用事件侦听器,并检查请求头以进行身份验证…此外,我最近一直在使用Guard,非常喜欢它。。。是的,这就是我必须做的。添加了一个通用URL,调用该URL时将引发404异常。这样,身份验证在symfony通常抛出404之前进行。是的,这就是我必须做的。添加了一个通用URL,调用该URL时将引发404异常。这样,身份验证在symfony通常抛出404之前进行。