symfony @Security和redirect_url

时间:2015-11-03 09:48:08

标签: php symfony annotations fosuserbundle

可以使用

    /**
     * @Security("has_role('ROLE_USER')")
     */
    public function indexAction()
    {
        // ...
    }

并为登录后重定向定义redirect_url

这里是security.yml

firewalls:
        main:
            pattern: ^/
            form_login:
                target_path_parameter: redirect_url

我不能使用referrer,因为它的ajax请求。

所以现在我用

if(!$user = $this->getUser()) {
            return $this->redirect($this->generateUrl('fos_user_security_login', array(
                'redirect_url' => $request->server->get('HTTP_REFERER')
            )));
        }

可以在安全注释中执行此操作吗?

1 个答案:

答案 0 :(得分:1)

您可以定义登录成功处理程序:

form_login:
    success_handler: some.service.id

创建一个实现\Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface的类,并使onAuthenticationSuccess()方法返回\Symfony\Component\HttpFoundation\RedirectResponse到您想要的任何网址。

通过这种方式,您可以使用任何自定义逻辑来确定您需要的目标网址。

例如,您可以使用\Symfony\Component\HttpFoundation\Request::isXmlHttpRequest()方法确定它是否是Ajax请求并采取相应的行动。