我正在尝试使用symfony 2.7的before过滤器来进行身份验证。我的事件监听器如下
class TokenListener {
protected $dm;
function __construct() {
}
public function setDocumentManager(DocumentManager $dm) {
$this->dm = $dm;
}
public function onKernelController(FilterControllerEvent $event) {
$controller = $event->getController();
if (!is_array($controller)) {
return;
}
if ($controller[0] instanceof TokenAuthenticatedController) {
$content = $event->getRequest()->getContent();
$json = json_decode($content,true);
$authId = $json['authId'];
$authToken = $json['authToken'];
echo "authId: {$authId}, authToken: {$authToken}\n";
$user = $this->dm->getRepository('HcUserBundle:User')
->createQueryBuilder()
->field('authId')->equals($authId)
->getQuery()
->getSingleResult();
if (!isset($user) || $user->getAuthToken() != $authToken) {
throw new AccessDeniedException('This action needs a valid token!');
}
}
}
}
但我得到500错误,symfony错误日志说
未捕获的PHP异常Symfony \ Component \ Security \ Core \ Exception \ AccessDeniedException:“此操作需要有效的令牌!”
而不是获得403错误,我也尝试使用AccessDeniedHttpException
并遇到同样的问题,有人知道如何在这里生成403响应吗?感谢
答案 0 :(得分:1)
您也可以返回新的回复,将状态代码设置为 *inp+= s1->str();
Codes::HTTP_FORBIDDEN
编辑:因为你在听众中,这可能不起作用......
编辑:你确定它会在你的prod env中产生500,而不仅仅是在app_dev上编辑:它应该以这种方式工作,在听众中:
return new Response("This action needs a valid token!", Codes::HTTP_FORBIDDEN);