注销后如何停止 Symfony 重定向
How to stop Symfony redirecting after logout
默认的 Symfony 行为是在注销后重定向到“/”。
我不需要来自 Symfony 的任何重定向,因为它是一个 api 应用程序。
就像在登录期间,当 Symfony 控制进行身份验证时如何,但随后仍然运行登录控制器以执行进一步的操作。在这种情况下,这也是注销的理想选择。
security.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
src/Controller/SecurityController.php 来自 Symfony 文档
/**
* @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');
}
您可以编写自定义注销处理程序。实际上,在 symfony 5.1 中引入了一种新方法。基本上,现在您可以为全局或某些特定防火墙注册一个事件侦听器,并在该人注销后执行任何操作。
返回到您的问题(来自下面的博客 post):
The Symfony\Component\Security\Http\Event\LogoutEvent object
received by the listener contains useful methods such as getToken()
(to get the security token of the session), getRequest() and
setResponse().
后面的会帮到你。这意味着你可以 return 任何你想要的而不是默认的 RedirectResponse
通过为事件设置新的响应对象。
services.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([]));
}
}
默认的 Symfony 行为是在注销后重定向到“/”。 我不需要来自 Symfony 的任何重定向,因为它是一个 api 应用程序。
就像在登录期间,当 Symfony 控制进行身份验证时如何,但随后仍然运行登录控制器以执行进一步的操作。在这种情况下,这也是注销的理想选择。
security.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
src/Controller/SecurityController.php 来自 Symfony 文档
/**
* @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');
}
您可以编写自定义注销处理程序。实际上,在 symfony 5.1 中引入了一种新方法。基本上,现在您可以为全局或某些特定防火墙注册一个事件侦听器,并在该人注销后执行任何操作。
返回到您的问题(来自下面的博客 post):
The Symfony\Component\Security\Http\Event\LogoutEvent object received by the listener contains useful methods such as getToken() (to get the security token of the session), getRequest() and setResponse().
后面的会帮到你。这意味着你可以 return 任何你想要的而不是默认的 RedirectResponse
通过为事件设置新的响应对象。
services.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([]));
}
}