Аутентификация Symfony не перехватывает запрос на вход

Я переделываю свое приложение 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 выдала исключение, что маршрут не создан (я думаю, его не следует создавать).


person Dawid Zbiński    schedule 25.05.2018    source источник
comment
Вероятно, вам следует создать новый проект S4 и следовать примеру в документации, пока вы не получите лучшее представление о том, как все сочетается друг с другом. Затем настройте. Совершенно уверен, что / логин должен быть доступен анонимно.   -  person Cerad    schedule 25.05.2018
comment
@Cerad Я почти уверен, что это сделал ... и я не эксперт, но я думаю, что вход в систему анонимно доступен, так как там anonymous: true   -  person Dawid Zbiński    schedule 25.05.2018
comment
Под вашим брандмауэром входа. Но не в admin_api, где находится ваш form_login. Это определенно не обычная установка, поэтому я предлагаю вам запустить стандартную конфигурацию, а затем отрегулировать ее. Даже заставить работать стандартную настройку может быть непросто.   -  person Cerad    schedule 25.05.2018
comment
@Cerad спасибо за предложение. Сейчас у меня все переработано, поэтому я не могу начать все сначала, но, по крайней мере, я попытаюсь сбросить настройки безопасности и сначала создать материал по умолчанию. Спасибо.   -  person Dawid Zbiński    schedule 25.05.2018


Ответы (2)


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

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

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

person MEmerson    schedule 28.05.2018

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

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

person Dawid Zbiński    schedule 29.05.2018