默認的 Symfony 行為是在注銷后重定向到“/”。我不需要來自 Symfony 的任何重定向,因為它是一個 api 應用程式。
就像在登錄期間 Symfony 控制進行身份驗證時如何,但仍然運行登錄控制器以執行進一步的操作。在這種情況下,這也是注銷的理想選擇。
安全.yaml
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
lazy: true
provider: app_user_provider
json_login:
check_path: app_login
username_path: email
password_path: password
logout:
path: app_logout
來自 Symfony 檔案的 src/Controller/SecurityController.php
/**
* @Route("/logout", name="app_logout", methods={"GET"})
*/
public function logout(): void
{
// controller can be blank: it will never be called!
throw new \Exception('Don\'t forget to activate logout in security.yaml');
}
uj5u.com熱心網友回復:
您可以撰寫自定義注銷處理程式。實際上,在 symfony 5.1 中引入了一種新方法。基本上,現在您可以全域或為某些特定防火墻注冊事件偵聽器,并在該人注銷后執行任何操作。
回到你的問題(來自下面的博客文章):
偵聽器接收到的 Symfony\Component\Security\Http\Event\LogoutEvent 物件包含有用的方法,例如 getToken() (獲取會話的安全令牌)、 getRequest() 和 setResponse()。
后者會幫助你。這意味著您可以RedirectResponse通過為事件設定新的回應物件來回傳您想要的任何內容而不是默認值。
服務.yaml:
services:
App\EventListener\CustomLogoutListener:
tags:
- name: 'kernel.event_listener'
event: 'Symfony\Component\Security\Http\Event\LogoutEvent'
dispatcher: security.event_dispatcher.main
method: onLogout
還有你的聽眾:
namespace App\EventListener;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Security\Http\Event\LogoutEvent;
class CustomLogoutListener
{
public function onLogout(LogoutEvent $logoutEvent): void
{
$logoutEvent->setResponse(new JsonResponse([]));
}
}
閱讀更多:更簡單的注銷自定義
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/398319.html
