Проверка подлинности Symfony не перехватывает запрос на вход - PullRequest
0 голосов
/ 25 мая 2018

Я переделываю свое приложение Silex в Symfony 4, так как Silex устареет через пару месяцев.Все отлично работает, но у меня есть небольшая проблема с пакетом безопасности Symfony.

Проблема в том, что я пытаюсь войти в приложение, но оно всегда перенаправляет меня обратно в мое приложение без отображаемой ошибки.

Я полагаю, это может быть неверная конфигурация, но у меня естьЯ искал какие-то проблемы, и я не могу найти никаких ошибок.

Вот мой security.yaml

providers:
    in_memory:
        memory:
            users:
                admin:
                    password: foo
                    roles: ROLE_ADMIN
encoders:
    Symfony\Component\Security\Core\User\User: plaintext
firewalls:
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false
    login:
        context: 'secured'
        pattern: '^/login'
        anonymous: true
        provider: in_memory
    secured_area:
        context: 'secured'
        pattern: '^(/admin|/api)'
        provider: in_memory
        form_login:
            login_path: /login/
            check_path: /admin/check/
            default_target_path: /admin/
        logout:
            path: /admin/logout/
            target: /
            invalidate_session: true

access_control:
    - { path: '^(/admin|/api)', roles: ROLE_ADMIN }

LoginController

/**
 * @Route("/login/", name="login")
 */
public function login(Request $request, AuthorizationCheckerInterface $authChecker, AuthenticationUtils $authUtils): Response
{
    $isLoggedIn = $authChecker->isGranted('ROLE_ADMIN');
    if ($isLoggedIn) {
        return $this->redirectToRoute('admin');
    }
    return $this->render('login/index.html.twig', [
        'error'         => $authUtils->getLastAuthenticationError(),
        'last_username' => $authUtils->getLastUsername()
    ]);
}

Я попытался установить опцию check_path на /login/check/ и другие подобные маршруты, но затем Symfony бросилисключение, что маршрут не создан (я думаю, он не должен быть создан).

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Итак, после попытки решить эту проблему в течение половины дня, я наконец понял, что я сделал не так.В отличие от Silex, Symfony не создает маршруты для login_check и logout самостоятельно.Мне нужно было как-то зарегистрировать маршруты, чтобы все прошло гладко.

Вы можете зарегистрировать маршруты в routes.yaml или используя annotations.

0 голосов
/ 28 мая 2018

Чтобы начать с устранения неполадок, первым делом я бы выбрал профилировщик. Это может помочь , позволив вам найти профилировщик, который показывает начальное перенаправление.

Я столкнулся с подобной проблемой несколько недель назад, когда мои пользователи входили в систему и автоматически проходили все проверки ролей.Окунувшись глубоко в код безопасности Symfony, я обнаружил, что настроил избирателя так, чтобы он возвращал значение true, если пользователь вошел в систему. Поэтому каждый раз, когда Symfony проверяет, есть ли у пользователя роль, он возвращает значение true и говорит, что это так.

Посмотрите на профилировщик, посмотрите, можете ли вы выяснить, что вызывает перенаправление, также вы можете посмотреть в файле журнала dev, чтобы найти там какую-либо информацию.

...