Symfony 4.2 не могу выйти - PullRequest
2 голосов
/ 15 января 2020

Я хотел бы реализовать действие выхода из системы в моем проекте Symfony.

В тот момент, когда я выполняю действие выхода из системы, я получаю исключение

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

I ' я копался в документах inte rnet и Symfony, обычно этот контроллер конечной точки никогда не достигается.

В моем контексте я не могу выйти из системы и не знаю, почему это Выйти функция выполнена.

это моя конфигурация SecurityController.hp

 /**
 * @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!');
}

security.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

Хорошего дня!

Ответы [ 3 ]

0 голосов
/ 16 января 2020

Решение 1

Если следовать инструкциям на Symfony Выход из системы безопасности

<?php

//App/Controller/SecurityController.php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

  class SecurityController extends AbstractController{
/**
 * @Route("/logout", name="app_logout")
 */
public function logout()
 {
    throw new \Exception('This method can be blank - it will be intercepted by the logout key on your firewall');
  }
}

Решение 2

если вы хотите реализовать свой собственный logout слушатель, вы можете использовать его для записи информации о пользователе.

class LogoutListener implements LogoutHandlerInterface{

/**
 * @{inheritDoc}
 */
public function logout(Request $request, Response $response, TokenInterface $token)
{
   // do whatever you want
    $user = $token->getUser();
  }
}

и предоставить его в firewall add handlers: App/listener/LogoutListener

0 голосов
/ 20 января 2020

Прочитайте документацию .

Чтобы включить выход из системы, активируйте параметр конфигурации выхода из системы под брандмауэром.

# 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
0 голосов
/ 15 января 2020

ваша функция может быть пустой, попробуйте удалить метод get

код выглядит правильно

...