2

我有一个使用 Kohana ORM Auth 的网站。我有一个 url,当通过 ajax 调用时将检查用户是否登录并返回与用户角色对应的 json_encoded 数据。当我在普通浏览器窗口中尝试时,此 url 工作正常。它返回了正确的值,但是当通过 AJAX 调用尝试 Auth::instance()->logged_in() 时,即使我确定用户已登录,它也会返回 FALSE。我正在按照以下链接 jQuery中列出的说明进行操作getJSON 不发送 cookie ,但它没有解决问题。

到目前为止我所做的是,我在基本控制器以及写入请求操作的文件中添加了以下几行

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST');  
header('Access-Control-Allow-Credentials: TRUE'); 

在发送实际请求之前的ajax中编写了以下代码

beforeSend: function(xhr){
            xhr.withCredentials = true;
        },

编辑 - - - - - - -

我尝试使用以下内容,但它给了我一个 COR 问题。

$.ajax({
        type: 'GET',
        url: "http://www.domain.com/web/joblist",
        xhrFields: {
            withCredentials: true
        },
        dataType: "json",
        data:{
            "tab":currentTab,
            "page":currentPage,
            "filter":filterStr
        },
        success: function(json){  ...
        },
        error: function(e) {
            ...
        }
    });
4

3 回答 3

2

使用数据类型:jsonp。

希望这能解决您的问题。

于 2014-09-06T03:09:26.787 回答
2

您的 AJAX 调用是使用浏览器请求的吗?(而不是 CURL 请求)。如果是这样,请检查 AJAX 调用是否成功,以及它返回的内容(例如使用 firefox firebug 控制台选项卡)

在我看来,您不必担心凭据,因为您提到它在同一个域上。因此,检查用户是否由 AJAX 端点的 php 控制器完成。

因此,通过正常的 AJAX 调用,您应该能够调用您的控制器来检查是否有人登录。例如

// set ajax setup
$.ajaxSetup({
type : "GET",
statusCode : {
    404 : function() {
        alert('Page not found.');
    },
    500 : function() {
        alert('Server error.');
    }
}

});

$.ajax({
    dataType : "json",
    url : 'some/uri/',
    data : {
        name : name
    },
    success : function(response) {
       // do something with the response
    }
});

这有帮助,还是我完全错过了你的观点?

于 2014-09-09T14:07:54.800 回答
0

问题是www。没有被添加到 url 的开头,并且 auth 拒绝来自没有 www 的 url 的服务请求。在它前面。

于 2014-09-19T07:06:50.147 回答