Kohana/JQuery Auth проблема с доступом
У меня есть сайт, использующий Kohana ORM Auth. У меня есть URL, который при вызове через ajax проверит, вошел ли пользователь в систему, и вернет json_encoded данные, соответствующие роли пользователя. Этот URL работает нормально, когда я попробовал его в обычном окне браузера. Он возвращал правильные значения, но при попытке через AJAX вызывает Auth::instance()->logged_in() возвращает FALSE, даже если я уверен, что пользователь вошел в систему. Я следую инструкциям, изложенным в следующей ссылке jQuery getJSON не отправляет куки, но это не решает проблему.
Что я сделал до сих пор, так это то, что я добавил следующие строки в базовый контроллер, а также в файл, в котором написано действие запроса
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) {
...
}
});
3 ответа
Проблема была в том, что www. не добавляется в начало URL-адреса, а auth отклоняет запрос на обслуживание от URL-адреса, у которого нет www. подготовлен к этому.
Используйте тип данных: jsonp.
Надеюсь, что это решит вашу проблему.
Ваш вызов AJAX запрашивается с помощью браузера? (И не запрос CURL). Если это так, проверьте, успешен ли вызов AJAX и что он возвращает (используйте, например, вкладку консоли firebug firefox)
Мне кажется, вам не нужно беспокоиться об учетных данных, так как вы упоминаете, что они находятся в том же домене. Так что проверка входа пользователя выполняется контроллером php на конечной точке AJAX.
Таким образом, при обычном вызове 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
}
});
Это помогает, или я просто полностью упустил вашу точку зрения?