Ajax-запросы с поддоменами Symfony2 (пример FOSUserBundle)

У меня есть основной домен site.dev и поддомен sub.site.dev.

У меня есть рабочий запрос соединения с FOSUserBundle, от site.dev. Теперь я хочу разрешить этот запрос и с субдомена sub.site.dev.

Когда я пытаюсь сделать это, у меня появляется ошибка в консоли отладки:XMLHttpRequest cannot load http://site.dev/ajax/check_login_ajax. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://sub.site.dev' is therefore not allowed access.

Вот часть моего файла security.yml:

firewalls:
    main:
        pattern: ^/
        form_login:
            login_path: fos_user_registration_register

            check_path:      check_login_ajax
            success_handler: user.security.authentication_handler
            failure_handler: user.security.authentication_handler
            provider: fos_userbundle
            csrf_provider: security.csrf.token_manager
        logout:
            path:   fos_user_security_logout
            target: /
        anonymous:    true

Я уже посмотрел параметр "host" в файлах маршрутизации, но не могу найти ничего, что хорошо работает для обоих доменов. Я думал о 2 брандмауэрах, но это тоже не работает.

Большое спасибо.

РЕДАКТИРОВАТЬ: Здесь я говорю о маршрутизации FOSUserBundle и Ajax, но я хочу, чтобы это решение работало для всех запросов ajax, которые я выбрал.

РЕДАКТИРОВАТЬ 2: Когда я выполняю AJAX-запрос, который вы видите ниже, у меня исполняется код.fail:

$.ajax({
        type: "POST",
        url: myRoute,
        dataType: 'json',
        data: {
            _username: $('#co_username').val(),
            _password: $('#co_password').val(),
            _remember_me: false,
            _csrf_token: $('#co__csrf_token').val()
        }
    }).done(function (data) {
        console.log('1');
    }).fail(function (data) {
        console.log('2');
    });

РЕДАКТИРОВАТЬ 3: Я только что понял, что AJAX-запрос выполняется, но на панели инструментов отладки Symfony2 ничего не появляется. Итак, я выполнил этот код, чтобы попробовать:

$.ajax({
        type: "POST",
        url: Routing.generate('check_login_ajax'),
        dataType: 'json',
        data: $('#connection-form').serialize(),
        success: function(data) {
            console.log('3');
        }
    }).done(function (data) {
        console.log('1');
    }).fail(function (data) {
        console.log('2');
    });

"2" по-прежнему печатается, но после этого я подключен.

Как должно работать ajaxSubmit с моим кодом? Нужно ли включать внешнюю библиотеку jQuery? И какой в ​​этом смысл? Не уверен, чтобы получить все

РЕДАКТИРОВАТЬ 4: statusText моего запроса "ОК" и статус "200", так почему код.fail выполняется...?

РЕДАКТИРОВАТЬ 5: Чтобы действительно понять ситуацию. Я перенаправлен на надпись / когда я пытаюсь достичь check_login_ajax. Вот предварительный просмотр моей панели инструментов разработчика отладки

панель инструментов разработчика отладки

Как вы можете видеть в моем брандмауэре, логин_путь установлен login_path: fos_user_registration_register, fos_user_registration_register - это надпись / маршрут.

Когда я выполняю запрос AJAX, который находится в EDIT 3, у меня есть результаты:

200
OK
2

1 ответ

Добавьте этот код в ваш.htaccess в веб-папку:

<IfModule mod_headers.c>
    Header add Access-Control-Allow-Origin "http://sub.site.dev"
</IfModule>

не забудьте поменять " http://sub.site.dev/" на свой реальный поддомен.

Для РЕДАКТИРОВАНИЯ 2

Попробуйте реализовать AJAX так:

$.ajax({
           type: "POST",
           url: "{{path('check_login_ajax')}}",
           data: $("#idForm").serialize(), // serializes the form's elements.
           success: function(data)
           {

           }
       });

Также вы можете использовать AjaxSubmit

$(this).ajaxSubmit({
      url: "{{path('check_login_ajax')}}",
      type: "POST",
      success: function (result){

      }
)};

Я надеюсь, что это поможет.

Другие вопросы по тегам