XMLHttpRequest в расширении Chrome с HTTP-авторизацией продолжает отправлять заголовок авторизации на обычных страницах - PullRequest
1 голос
/ 06 июля 2011

Я работаю над расширением Chrome, которое работает с API Basecamp.

У меня есть фоновая страница, выполняющая все мои XMLHttpRequest к API.Я не использую OAuth, но базовую HTTP-авторизацию с токеном API.

На своей фоновой странице я буду выполнять запросы следующим образом:

var xmlReq = new XMLHttpRequest();
xmlReq.onreadystatechange = function(){ doSomething(xmlReq.responseXML); };

xmlReq.open(
  'GET', 
  'https://mycompany.basecamphq.com/projects.xml',
   true, 
   access_token, 
   'x'
);

xmlReq.send(null);

Это все работает нормально, нопроблема заключается в том, что после того, как я использую расширение для отправки запроса, каждый раз, когда я перехожу к https://mycompany.basecamphq.com,, отправляется авторизация заголовка HTTP-запроса, что приводит к тому, что некоторые вещи не работают в веб-интерфейсе Basecamp.Как я могу сделать запрос в своем расширении с базовой авторизацией HTTP, но не иметь заголовок в моих обычных запросах браузера?

Да, запутанный вопрос.Я постараюсь уточнить это, если у вас есть вопросы.Спасибо

Ответы [ 2 ]

4 голосов
/ 07 июля 2011

Полагаю, что я нашел решение.

Используя функцию xmlhttpresponse.setRequestHeader (), если я вручную устанавливаю заголовок авторизации, он не остается постоянным.

Так что, используя этомодифицированная версия приведенного выше кода:

xmlReq.open(
  'GET', 
  'https://mycompany.basecamphq.com/projects.xml',
   true);

xmlReq.setRequestHeader("Authorization", "Basic "+base64_encode(access_token+":x"));

xmlReq.send(null);

Я использовал функцию base64_encode, находящуюся в библиотеке phpjs.org.

0 голосов
/ 09 ноября 2011

Я просто добавляю это для тех, кто использует Google Apps Script. Вы можете получить такое же поведение, выполнив это:



    function myFunc(){
      var parameters = {
        method: "GET",
        accept: "application/xml",
        contentType: "application/xml",
        headers: {"Authorization": "Basic " +Utilities.base64Encode("YOUR_BASECAMP_ACCESS_TOKEN:GARBAGE_PASSWORD")}
      };
      var baseURL = "https://YOUR_COMPANY_NAME.basecamphq.com/projects.xml";
      var text = UrlFetchApp.fetch(baseURL, parameters);
      Logger.log(text.getContentText());
    }


Вы можете запустить это, затем нажать «Просмотр»> «Журналы», чтобы увидеть результаты. Больше информации здесь: http://developer.37signals.com/basecamp/index.shtml но написано, если вы знаете, как обходить запросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...