php - symfony 注销目标从未应用

标签 php symfony authentication logout

我第一次遇到 Symfony (2.7) 身份验证问题,我真的找不到可行的解决方案。尽管 Symfony 有一个专用的配置选项 logout -> target,但它从未应用于注销,我总是被定向到/。我可能错过了正确实现此方法的一些限制条件。

好的,我正在使用:

  • 基于表单的登录
  • Hook 自定义失败、成功和注销处理程序,它们运行良好

我的config.yml防火墙

secured_area:
        pattern:    ^/
        stateless:  false
        form_login:
            ...
        logout:
            path:   logout
            target: /test
            success_handler: logout_success_handler
        anonymous: ~

为了测试我什至添加了

access_control:
    - { path: ^/test, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/,     roles: IS_AUTHENTICATED_ANONYMOUSLY }

我正在为路径使用路由名称,该路由存在并且工作正常(我可以登录login_check注销 ).

我希望通过设置logout -> target,在注销时我会被重定向到页面/test。但无论我尝试过什么,直到现在我总是处于注销状态/注销之后。

如果有人能指出正确的方向,我会很高兴,如何注销到自定义路由(我也已经尝试使用路由名称​​目标)。非常感谢!

顺便说一句:

我的 logout_success_handler 目前什么都不做。通过启用转储,我还看到,重定向始终指向/而不是/test。

public function onLogoutSuccess(Request $request)
{
    $response = parent::onLogoutSuccess($request);

    //var_dump($response); die;

    return $response;
}

最佳答案

没有内置的注销目标。你必须在你的处理程序中处理它。

第一步

将注销目标放入参数文件

parameters:
    logout.target: /test

第 2 步

修改您定义注销处理程序的 service.yml:

some.logout_handler:
    class: SomeBundle\Security\YourAuthenticationHandler
    arguments: ["@security.context", %logout.target%]

这会将它注入(inject)到您的处理程序中。

第 3 步

最后,在您的onLogoutSuccess 方法中执行

public function onLogoutSuccess(Request $request)
{
    $response = parent::onLogoutSuccess($request);

    return new RedirectResponse($this->logoutTarget);
}

关于php - symfony 注销目标从未应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32902400/

相关文章:

php - 如何将 SQL 查询结果更改为 superfish 下拉菜单?

php - 将 key$ 和 $value 插入数据库表单 foreach

symfony - 貂皮选择器 : any way to get the element in base of the content inside?

php - 在 session 中保存请求

validation - 是否有必要验证 SAML 断言

web-services - Webhook 回调安全

php - 按计划部署 Azure 云服务

php - 在没有 composer dump-autoload 的情况下在 Laravel 中加载自定义 php 文件

php - 如何管理优惠券代码?

php - 用户登录被重定向到 index.php