symfony @Security 和 redirect_url

symfony @Security and redirect_url

可以使用

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

并为登录后重定向定义 redirect_url

这里是security.yml

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

我不能使用引荐来源网址,因为它的 ajax 请求。

所以现在我使用

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

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

您可以定义一个登录成功处理器:

form_login:
    success_handler: some.service.id

创建一个实现 \Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface 的 class 并使 onAuthenticationSuccess() 方法 return 成为 \Symfony\Component\HttpFoundation\RedirectResponse 到您想要的任何 URL。

通过这种方式,您可以拥有确定目标的任何自定义逻辑 URL 您需要。

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