Проблема с базовой аутентификацией Twitter с использованием AJAX

StackOverflow https://stackoverflow.com/questions/2438164

Вопрос

Редактировать:Этот вопрос теперь излишен, поскольку Twitter больше не поддерживает базовую аутентификацию.Я оставил это, так как это актуально для всех, кто выполняет базовую аутентификацию через AJAX в других сервисах.


Я разрабатываю приложение на JavaScript, которое в рамках своей функциональности должно позволять пользователям обновлять свой статус в Twitter.Приложение предназначено для работы на мобильных телефонах, и поэтому я действительно не хочу отправлять пользователей на сайт Twitter для входа в систему;они должны просто иметь возможность передавать свои учетные данные в приложение, и я возьму на себя весь процесс входа.

Итак, я пытаюсь использовать базовую аутентификацию с restful API.Мой код выглядит следующим образом:

function postTweet(input){
            $.ajax( {
                type: "POST",
                url: "http://twitter.com/statuses/update.json",
                data: {status: input},
                dataType: "json",
                error: function() { alert("Some error occured"); },
                success: function() { alert("Success!"); },
                beforeSend: function(request) { request.setRequestHeader("Authorization", "Basic BASE64OFMYCREDENTIALS");}
                } ) ;
        }

Итак, насколько мне известно, это должно выполнить аутентификацию из заголовка XMLHttpRequest, а затем опубликовать статус.

Однако всякий раз, когда я вызываю этот код, я получаю сообщение об ошибке "401 Unauthorized" от Twitter.

Ниже приведены заголовки запросов и ответов от firebug:

Запрос:

OPTIONS /statuses/update.json HTTP/1.1
Host: twitter.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.2) Gecko/20100115 Firefox/3.6
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Origin: null
Access-Control-Request-Method: POST
Access-Control-Request-Headers: authorization

Ответ:

HTTP/1.1 401 Unauthorized
Date: Sat, 13 Mar 2010 11:08:58 GMT
Server: hi
Status: 401 Unauthorized
WWW-Authenticate: Basic realm="Twitter API"
X-Runtime: 0.00204
Content-Type: application/json; charset=utf-8
Cache-Control: no-cache, max-age=300
Set-Cookie: guest_id=1268478538488; path=/
_twitter_sess=BAh7CDoPY3JlYXRlZF9hdGwrCPlyNlcnAToHaWQiJWUyN2YzYjc3OTk2NGQ3%250ANzJkYTA4MjYzOWJmYTQyYmUyIgpmbGFzaElDOidBY3Rpb25Db250cm9sbGVy%250AOjpGbGFzaDo6Rmxhc2hIYXNoewAGOgpAdXNlZHsA--d687808459872da0aa6a89cab35fd347300b4d07; domain=.twitter.com; path=/
Expires: Sat, 13 Mar 2010 11:13:58 GMT
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 88
Connection: close

Любая помощь в этом была бы очень признательна,

Спасибо,

джелфорд

ps.Я должен упомянуть, что я использую jQuery, на случай, если это непонятно.

Это было полезно?

Решение

Поскольку приложение в конечном итоге должно было работать только на стороне клиента (оно было разработано для мобильной платформы JIL), я решил стиснуть зубы и выполнить полный OAuth и просто смириться с тем, что оно не сработает, если вы откроете его как веб-страницу в Firefox.

Что меня озадачивает, так это то, что - хотя я знаю, что POSTs никогда не будут работать в браузере - я думал, установив заголовки Auth в объекте HttpRequest и все еще делая запрос GET, все пройдет нормально.По-видимому, нет.

Сейчас этот момент отключен, так как крайний срок работы приложения истек (я закончил его :)), но я подумал, что кому-то, возможно, будет интересно узнать, что я не сделал этого заставьте его работать с помощью базового маршрута аутентификации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top