2012-03-22 2 views
5

Я использую FOSUserBundle, и мне нужна возможность входа с двух разных маршрутов (или более). Эти маршруты будут иметь разные шаблоны, а также вход в разные области. Единственное, что отличается между входами, - это требуемое разрешение. Трассы будет что-то вдоль линийSymfony2 - FOSUserBundle - Несколько мест входа в систему

site.com/login

site.com/admin/login

, а также возможно site.com/ajax_login

Я был умеет выработать способы получения разных шаблонов для рендеринга, вырывая все, кроме токена CSRF, из FOSUserBundle login.html.twig (который переопределяется), затем создает маршруты, которые отображают свои собственные поля входа в систему, а также маршрут входа (так что просто маркер CSRF получает визуализацию). Это не работает для администратора/входа в систему, так как форма отправляется назад для входа в систему, и если она не работает, она отображает эту страницу.

Есть ли какой-либо простой способ достичь этого?

+0

Возможно, вы говорите о разных брандмауэрах? – tamir

+0

Как вы сделали, чтобы использовать форму входа в несколько шаблонов? – httpete

ответ

0

Не могли бы вы разместить свой шаблон?

Вы правильно отредактировали путь в шаблоне?

<form action="{{ path('form_submit') }}" method="post" {{ form_enctype(form) }}> 

Вы хотите отправить форму на правильный контроллер.

1

Вот что я в конце концов придумал, в основном использует один и тот же брандмауэр и один и тот же контекст, поэтому, когда я войти в системе с помощью обычного входа они также получить доступ к администратору (при условии, что они являются админами)

firewalls: 
    admin: 
     context:   site 
     switch_user:  true 
     pattern:   /admin(.*) 
     form_login: 
      provider:  fos_userbundle 
      login_path:  /admin/login 
      success_handler: admin_authentication_handler 
      use_forward: false 
      check_path:  /admin/login_check 
      failure_path: null 
      use_referer: true 
      always_use_default_target_path: true 
      default_target_path: /admin/ 
     logout: 
      path:   /admin/logout 
      target:   /admin/login 
     anonymous: true 
    public: 
     pattern: ^/ 
     context:   site 
     form_login: 
      login_path:  /login 
      success_handler: authentication_handler 
      failure_handler: authentication_handler 
      provider: fos_userbundle 
     anonymous: true 
     logout: true 

Конечно, если вам нужно сделать окно входа в AJAX, вам нужно переопределить обработчики успеха и отказа и проверить, является ли запрос XmlHttpRequest и возвращать результат входа.

2

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

Я отправил запрос на тягу, который позволяет вам легко создавать новые шаблоны входа. Проверьте запрос на извлечение здесь: https://github.com/FriendsOfSymfony/FOSUserBundle/pull/1186.

Существует также еще один довольно простой способ достижения этого. Продлить SecurityController и изменить renderLogin метод с следующим содержанием

protected function renderLogin(array $data, $template) 
{ 
    return $this->container->get('templating')->renderResponse('YourBundle:Security:login.html.twig'); 
} 

Затем создать маршрут к вновь созданному контроллеру:

admin.login: 
    pattern: /admin/login 
    defaults: { _controller: YourBundle:Security:login } 

После этого только вы должны сделать, это изменить ваш конфиг безопасности соответственно. Измените свой входной_файл_файла form_login на/admin/login, и вам хорошо идти.

+0

ваш запрос на получение имеет ошибки и, следовательно, еще не объединен с FOSUserBundle. У вас есть обновление? – Mondane

Смежные вопросы