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
    }
});

Это помогает, или я просто полностью упустил вашу точку зрения?

Другие вопросы по тегам