默认的 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 中引入了一种新方法。基本上,现在您可以全域或为某些特定防火墻注册事件侦听器,并在该人注销后执行任何操作。
回到你的问题(来自下面的博客文章):
后者会帮助你。这意味着您可以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([]));
}
}
阅读更多:更简单的注销自定义
0 评论