【发布时间】:2011-10-13 17:03:27
【问题描述】:
如果用户尝试访问受保护的 URL 并且未经过身份验证/授权,我需要运行一些代码。
默认情况下,Symfony 通过将用户重定向或转发到登录表单来处理未经身份验证的用户。如果请求方法是 POST,我想防止这种情况发生,而是回显一个 JSON 对象。
我能想到的最好的处理方法是创建一个自定义侦听器来侦听kernel.request 事件并检查两件事:
- 检查请求方法是否为POST
- 检查用户是否完全 认证
如果是 POST 请求,并且用户未完全通过身份验证,我会回显一个 JSON 对象。
但我的侦听器(预计)会触发所有请求 - 我想将其限制为仅检查请求是否针对受防火墙保护的 URL。是否可以通过编程方式进行检查?
我也有一个挥之不去的怀疑有一个更简单的方法来解决这个问题,但无法弄清楚,所以如果有人有任何提示,我很想听听他们:)
编辑
@Problematic - 只检查防火墙请求的原因是因为我有一些没有防火墙的请求,如果我的代码被触发,我将收到上述 JSON 对象而不是请求的真实响应。
现在,如果我没有登录并向api/get/something(位于防火墙后面)发出 POST 请求,Symfony 会返回描述登录页面的 HTML。相反,我只想回显{error: 'User is not authorized'} 之类的内容。但我只希望 POST 请求发生这种情况。
【问题讨论】:
-
只检查防火墙请求的原因是什么?
-
@Problematic,请看我的编辑