【发布时间】:2013-11-25 12:34:11
【问题描述】:
在 Symfony2 中,是否可以检查用户是否经过身份验证以访问他请求的 URl。 我想要做的是,我不想让登录用户返回注册或登录或恢复密码页面。
这是我的 security.yml:
access_control:
- { path: ^/signup/, roles: IS_AUTHENTICATED_ANONYMOUSLY && !IS_AUTHENTICATED_FULLY}
- { path: ^/register/, roles: IS_AUTHENTICATED_ANONYMOUSLY && !IS_AUTHENTICATED_FULLY}
- { path: ^/recover/, roles: IS_AUTHENTICATED_ANONYMOUSLY && !IS_AUTHENTICATED_FULLY}
但这显示,当前用户访问被拒绝页面。所以我认为如果我可以通过检查他是否被允许将用户重定向到此类请求的主页,那将是很好的。我可以通过提供用户在侦听器中是否经过身份验证的路径来检查吗?
public function onKernelResponse(FilterResponseEvent $event)
{
$request = $event->getRequest();
$path = $request->getPathInfo();
if($this->container->get('security.context')->getToken() != null) {
// To check if user is authenticated or anonymous
if( ($this->container->get('security.context')->getToken() instanceof UsernamePasswordToken) &&
($this->container->get('security.context')->isGranted('IS_AUTHENTICATED_FULLY') == true) ) {
// HOW TO CHECK PATH ?
// set response to redirect to home page
}
}
}
【问题讨论】:
-
为什么使用
onKernelResponse事件而不是kernel.request.event? -
是的,你是对的。我应该在 kernel.request.event 中检查它,谢谢。
标签: php symfony authentication