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){
}
)};
Я надеюсь, что это поможет.