2014-09-02 181 views
2

我有一个网站使用Kohana ORM身份验证。我有一个网址,当通过ajax调用将检查用户是否登录并返回与用户角色相对应的json_encoded数据。这个网址工作正常,当我在正常的浏览器窗口中尝试它。它正在返回正确的值,但是当通过AJAX调用尝试时,Auth :: instance() - > logged_in()返回FALSE,即使我确信用户已登录。 我遵循以下链接中列出的说明 jQuery getJSON doesnt send cookies 但它没有解决问题。Kohana/JQuery身份验证访问问题

我迄今所做的就是,我加在基本控制器以下线路,以及在哪里请求的动作发送实际的请求之前写

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) { 
      ... 
     } 
    }); 
+0

尝试将'http:// www.domain.com/web/joblist'替换为'/ web/joblist' – Yang 2014-09-06 03:04:22

+0

目标URL是否相同或不同? – 2014-09-06 03:07:29

+0

目标网址相同。 – logeeks 2014-09-06 08:56:41

回答

0

问题在于www。没有被添加到URL的开头,并且auth拒绝服务来自没有www的url的请求。预先给它。

2

使用数据类型:jsonp。

希望这会解决您的问题。

2

使用浏览器请求您的AJAX调用吗? (而不是CURL请求)。如果是这样,检查AJAX调用是否成功,并返回什么(使用例如Firefox的萤火虫控制台标签)

在我看来,你不必担心凭证,因为你提到它在同一个域。因此,检查用户是否通过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 
    } 
}); 

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