簡體   English   中英

symfony注銷目標從未應用過

[英]symfony logout target never applied

我第一次遇到Symfony(2.7)身份驗證問題,我真的找不到可行的解決方案。 雖然Symfony有一個專用的配置選項logout - > target ,但這從未在注銷時應用,我總是被定向到/。 我可能錯過了正確實現這一點的一些限制。

好的,我正在使用:

  • 基於表單的登錄
  • Hooked自定義故障,成功和注銷處理程序,它們運行良好

我的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 }

我正在使用路徑的路由名稱,路由存在並且正常工作(我可以登錄登錄 _check注銷 )。

我希望通過設置logout - > target ,在注銷時我會被重定向到頁面/測試。 但無論我嘗試過什么,直到現在我總是在注銷之后。

我很高興,如果有人可以指出我正確的方向,如何注銷到自定義路線(我也嘗試使用路線名稱進行目標 )。 非常感謝!

BTW:

我的logout_success_handler目前沒有任何功能。 通過啟用轉儲,我也看到,重定向始終是/而不是/ test。

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

    //var_dump($response); die;

    return $response;
}

沒有內置的注銷目標。 你必須在你的處理程序中處理它。

步驟1

將您的注銷目標放入參數文件中

parameters:
    logout.target: /test

第2步

修改service.yml ,其中已將logout處理程序定義為以下內容:

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

這會將其注入您的處理程序。

第3步

最后,在你的onLogoutSuccess方法中做

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

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

對於人們有同樣問題的最終方法。

/**
 * LogoutSuccessHandler
 */
class LogoutSuccessHandler extends DefaultLogoutSuccessHandler implements LogoutSuccessHandlerInterface
{
    /**
     * @var string
     */
    private $logout_route;

    /**
     * Constructor
     * 
     * @param RouterInterface $router
     * @param EntityManager $em
     */
    public function __construct(HttpUtils $httpUtils, $logoutRoute)
    {
        $this->logout_route = $logoutRoute;

        parent::__construct( $httpUtils );
    }

    /**
     * @param Request $request
     * @return Response
     */
    public function onLogoutSuccess(Request $request)
    {
        return $this->httpUtils->createRedirectResponse($request, $this->logout_route);
    }
}

我想使用httpUtils,因為createRedirectResponse了解路徑和路由名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM