развернутая аутентификация с использованием jquery ajax

Я установил Debian 7.0.0 64-разрядную версию, я также успешно установил в нее mongodb, я создал некоторую коллекцию и пользовательскую коллекцию в развернутой панели управления, затем, используя руководство пользователя, как подключиться и запросить таблицу в развернутом виде, я выбираю jquery ajax для входа в систему, развернутую с моего локального сайта, и после успешного входа в систему я пытаюсь получить / опубликовать некоторые данные, но каким-то образом развернутый отказ в доступе. Я создаю коллекцию, называя ее людьми, а затем в событии GET, POST, PUT я пишу этот код:

cancelUnless(me, "You are not logged in", 401);

затем, используя этот код ajax, я пытаюсь войти в систему и отправить данные новых людей:

$(document).ready(function(){
/* Create query for username and password for login */
var request = new Object;
request.username = 'myusername';
request.password = 'mypassword';
submitaddress = "http://myipaddress:myport/users/login";
$.ajax({ 
    type: "POST",
    url: submitaddress,
    data: request, 
    cache: false, 
    success: function(data){
        var returndata = eval(data);
        /* After Login success try to post people data */
        if (returndata){
            var request2 = new Object;
            request2.name = 'People Name';
            submitaddress2 = "http://myipaddress:myport/people";
                $.ajax({ 
                    type: "POST",
                    url: submitaddress2,
                    data: request2, 
                    cache: false, 
                    success: function(){
                    }
                })  
            }
        }
    }
});

})

Успешный процесс входа в систему, он возвращает идентификатор сеанса и мой идентификатор пользователя, но после успешного входа в систему, и я пытаюсь отправить данные людей POST, он возвращает «Вы не вошли в систему», может ли кто-нибудь помочь мне, каков правильный способ входа в систему, развернутый с помощью jquery с другого сайта (междоменного)?


person user2507987    schedule 21.06.2013    source источник


Ответы (2)


Поскольку вы отправляете междоменный запрос (CORS), файлы cookie не отправляются автоматически вместе с HTTP-запросом. Чтобы включить это в jQuery, вам нужно установить для свойства withCredentials xhrFileds значение true; пример ниже:

/* Create query for username and password for login */
var request = {};
request.username = 'MyUsername';
request.password = 'MyPassword';
submitaddress = "http://myaddress:myport/users/login";
$.ajax({ 
    type: "POST",
    url: submitaddress,
    data: request, 
    cache: false,
     xhrFields: {
         withCredentials: true
     },
    success: function(data){
        console.log(data.id);
        /* After Login success try to post people data */    
        if (data.id){
            var request2 = {};
            request2.name = 'People Name';
            submitaddress2 = "http://myaddress:myport/users/me";
            $.ajax({ 
                type: "GET",
                url: submitaddress2,
                cache: true,
                xhrFields: {
                    withCredentials: true
                },
                success: function(data){
                    console.log(data);
                }
            });  

        }
    }
});

Дополнительные сведения см. в разделе jQuery.ajax().

person yoneal    schedule 09.08.2013
comment
Благодарю вас! Вы только что закончили 12 часов отупляющих мозгов пыток по устранению неполадок, пока я пытался во всем этом разобраться. Я отправил запрос на извлечение в документацию Deployd, чтобы лучше документировать CORS с помощью jQuery. - person Marshall Thompson; 22.12.2013

Наконец я нашел ответ, вместо того, чтобы использовать jquery ajax для входа в систему, я пытаюсь использовать другой способ входа в систему, я использую curl в php, вот мой код:

$url = 'http://myaddress:myport/users/login';
$postdata = array('username' => 'myusername', 'password' => 'mypassword'); 
foreach($postdata as $key => $value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string, '&');
$ch = curl_init();
//set the url, number of POST vars, POST data
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //Set curl to return the data instead of printing it to the browser.
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
$result = curl_exec($ch);
$url = 'http://myaddress:myport/mycollection';
//POST DATA here
curl_close($ch);

Все мои данные опубликованы, доступ не запрещен, в дальнейшем мы можем использовать jquery ajax вместе с этим завитком на том же хосте...

person user2507987    schedule 28.06.2013