Веб-каталог Symfony2.3 symlink, вызывающий цикл перенаправления формы входа

#symfony #redirect #login

#symfony #перенаправление #войти

Вопрос:

Моя цель — иметь такие URL-адреса для этих 3 приложений:

 http://somedomain.com/symfony-app/app_dev.php
http://somedomain.com/symfony-app2/app_dev.php
http://somedomain.com/symfony-app3/app_dev.php
 

ОБНОВЛЕНИЕ: все 3 приложения sf2 независимы друг от друга. Это означает, что между ними нет никакого взаимодействия.

Структура каталогов выглядит следующим образом:

 /var/webroot/symfony-app 
/var/webroot/symfony-app2 
/var/webroot/symfony-app3
 

(где symfony-app — это символическая ссылка на веб-папку sf symfony-app, размещенную в каком-либо другом каталоге за пределами /var/webroot). То же самое с symfony-app2 и symfony-app3.

Проблема: я получаю цикл перенаправления на http://somedomain.com/symfony-app/app_dev.php/login всякий раз, когда я получаю доступ http://somedomain.com/symfony-app/app_dev.php

security.yml

  security:
       providers:
          fos_userbundle:
             id: fos_user.user_provider.username_email

      encoders:
           FOSUserBundleModelUserInterface: sha512

      firewalls:
          main:
              http_basic: ~
              pattern: ^/
              form_login:
                 provider: fos_userbundle
                 csrf_provider: form.csrf_provider
                 default_target_path: /admin #authentication required page
                 always_use_default_target_path: true
              logout:
                 target: /login
              anonymous:    true
              switch_user: true

      access_control:
        - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin, role: IS_AUTHENTICATED_FULLY } 
 

Получение этого сообщения об ошибке после установки intercept_redirects: true в config_dev.yml:

Этот запрос перенаправляет на http://somedomain.com/symfony-app/app_dev.php/login . Перенаправление было перехвачено панелью инструментов web debug для облегчения отладки. Для получения дополнительной информации см. Параметр «перехватывать-перенаправлять» профилировщика.

Приложение хорошо работает при использовании на виртуальном хостинге apache, но у каждого из них совершенно разные URL-адреса. Никаких изменений в .htaccess или security.yml не было сделано, когда я пытался использовать все 3 приложения в качестве подкаталогов.

Я пропустил какую-либо конфигурацию в security.yml? .htaccess?

Любая помощь будет оценена. TIA.

Ответ №1:

При первом намеке, без вдавания в подробности, кажется, что ваши сеансы смешиваются. Попробуйте установить конфигурацию пути к файлу cookie http://symfony.com/doc/current/reference/configuration/framework.html#cookie-path

РЕДАКТИРОВАТЬ — попросил объяснить немного подробнее

Файл cookie сеанса генерируется PHP при запуске сеанса, чтобы иметь возможность отслеживать дальнейшие посещения пользователя и http-запросы, которые он делает к вашему веб-приложению. По умолчанию домен cookie устанавливается на домен, в который был отправлен запрос, «somedomain.com » в вашем примере и путь к /. Таким образом, все эти 3 веб-приложения будут использовать один и тот же файл cookie сеанса — somedomain.com с помощью path /. Я имел в виду, что вы должны установить путь к файлам cookie во всех 3 ваших веб-приложениях, чтобы каждое из них могло иметь свой собственный файл cookie сеанса, как показано ниже:

 # symfony-app/app/config.yml
framework:
    session:
        cookie_path: /symfony-app/

# symfony-app2/app/config.yml
framework:
    session:
        cookie_path: /symfony-app2/

# symfony-app3/app/config.yml
framework:
    session:
        cookie_path: /symfony-app3/
 

Таким образом, каждое приложение будет иметь свой собственный файл cookie сеанса:

  • приложение 1 будет иметь домен somedomain.com и путь /symfony-приложение/
  • app2 будет иметь домен somedomain.com и путь /symfony-app2/
  • app2 будет иметь домен somedomain.com и путь / symfony-app3/

и они не будут повторно использовать сеансовые файлы cookie из других приложений.

Тем не менее, не совсем уверен, была ли это ваша проблема, но это было первое, что я заметил. Могло случиться так, что вы открыли app1, а затем app2, который получил файл cookie из app1, но не нашел данных сеанса для этого идентификатора из файла cookie, поскольку он был сохранен в хранилище сеансов app1, и вы попали в цикл.

Комментарии:

1. Не могли бы вы объяснить немного подробнее? Пока я настроил только 1 приложение sf, и я уже получаю этот цикл перенаправления. Я еще не добавил 2 других приложения.