2

我想对我的Symfony项目实施注销操作。

目前,当我进行注销操作时,我收到异常

controller can be blank: it will never be executed!. 

我已经深入研究了互联网和 Symfony 文档,通常这个端点控制器永远不会到达。

在我的上下文中,我无法注销,也不知道为什么要执行此注销功能。

这是我的配置 SecurityController.php

/**
 * @Route("/logout", name="app_logout", methods={"GET"})
 */
public function logout()
{
    // controller can be blank: it will never be executed!
    throw new \Exception('controller can be blank: it will never be executed!');
}

安全.yaml

firewalls:
dev:
    pattern: ^/(_(profiler|wdt)|css|images|js)/
    security: false

main:
    anonymous: ~
    pattern:  /login
    provider: app_user_provider
    guard:
        authenticators:
            - App\Security\LoginFormAuthenticator
    logout:
        path: app_logout
        # where to redirect after logout
        target: app_login

祝你今天过得愉快!

4

2 回答 2

0

您将注销侦听器放置在“主”防火墙中,但该模式未涵盖注销 url。所以“/logout”的请求不会通过它运行。您可以将注销侦听器放置在覆盖注销 url 的防火墙中,或者修改“主”防火墙的模式以包含注销 url。后者看起来像这样:

# config/packages/security.yaml
firewalls:
  main:
    # ...
    pattern: ^/(login|logout)$
    # ...
于 2021-02-04T13:09:35.363 回答
-1

阅读文档

要启用注销,请激活防火墙下的注销配置参数。

# config/packages/security.yaml
firewalls:
  main:
    # ...

    logout:
      path:   app_logout
      # where to redirect after logout
      # target: app_any_route

接下来,您需要为此 URL 创建一个路由(但不是控制器)。

# config/routes.yaml
app_logout:
  path: /logout
  methods: GET
于 2020-01-20T11:59:08.627 回答