我有一个主域名site.dev和一个子域名sub.site.dev。
我与来自site.dev的FOSUserBundle有一个有效的连接请求。 现在,我也想从子域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
我已经看过"主持人"路由文件中的参数,但无法找到适用于这两个域的任何内容。我想过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是" OK"并且状态是" 200",那么,为什么.fail代码被执行...?
编辑5:要真正了解情况。 当我尝试访问check_login_ajax时,我被重定向到铭文。 这是我的调试开发人员工具栏的预览
正如您在防火墙中看到的那样,login_path设置为login_path: fos_user_registration_register
。 fos_user_registration_register是题词/路线。
当我执行编辑3中的AJAX请求时,我得到了结果:
200
OK
2
答案 0 :(得分:0)
将此代码添加到.htaccess下的网络文件夹中:
1
不要忘记使用您的真实子域名更改“http://sub.site.dev”。
编辑2
尝试像这样实现AJAX:
<IfModule mod_headers.c>
Header add Access-Control-Allow-Origin "http://sub.site.dev"
</IfModule>
您也可以使用AjaxSubmit
$.ajax({
type: "POST",
url: "{{path('check_login_ajax')}}",
data: $("#idForm").serialize(), // serializes the form's elements.
success: function(data)
{
}
});
我希望这有帮助。