2015-07-01 2 views
1

TL; DR - Я пытаюсь создать расширение Chrome, которое отображает количество текущих уведомлений для пользователя из StackOverflow.Подключение расширения Chrome к StackExchange API oAuth

Я следую за Chrome Extension tutorial при создании расширения, использующего oAuth. Перестановка из битов Google OAuth для (что я думаю) в API биты StackExchange, я в конечном итоге следующее в моем background.js файле:

var oauth = ChromeExOAuth.initBackgroundPage({ 
    //ES6 template strings! 
    'request_url' : `https://stackexchange.com/oauth?client_id=${STACK_APP.id}&scope=read_inbox,no_expiry`, 

    'authorize_url' : 'https://stackexchange.com/oauth/login_success', 
    'access_url' : 'https://stackexchange.com/oauth/access_token', 

    'consumer_key' : STACK_APP.key, 
    'consumer_secret' : STACK_APP.secret, 

    //'scope' : '', //not sure I need this... 

    'app_name' : 'StackOverflow Notifications (Chrome Extension)' 
}); 

oauth.authorize(function() { 
    console.log('authorize...'); 
}); 

Когда я запускаю расширение локально, он пытается открыть новый браузер чтобы завершить рукопожатие oAuth - это здорово, за исключением того, что я заканчиваю следующий URL: https://stackexchange.com/oauth/login_success?oauth_token=undefined

Вкладка браузера застряла здесь. enter image description here

Я не совсем уверен, что проблема - я не знаю, есть ли у меня неправильные URL-адреса, перечисленные в моем initBackgroundPage() вызова, или если мой StackApp имеет неправильный домен OAuth (так как это расширение Chrome .. this question на самом деле не ответил на все вопросы).

Любые идеи были бы высоко оценены!

+0

Было бы неспортивным указать на существующий открытый источник? – Xan

+0

Я, вероятно, верну свой код на GitHub ... когда я это сделаю, я отправлю ссылку для справки. – arthurakay

+0

Нет-нет, было бы неспортивным дать _you_ ссылку на другое расширение, которое уже существует? Вы хотите сделать свой, не испорченный идеями других? Конечно, теперь, когда я перечитываю ваш вопрос, тот, который я имею в виду, - это уведомитель, который не отображает счетчик. – Xan

ответ

3

Из того, что я могу сказать, учебник oAuth, который я упомянул в моем OP, устарел - вам больше не нужно что-либо из этого, вместо этого вы можете использовать chrome.identity.

Чтобы было ясно, есть несколько вещей, которые я должен был сделать:

STACK_APP = { 
    id   : 1234, 
    scope  : 'read_inbox,no_expiry', 

    request_uri : 'https://stackexchange.com/oauth/dialog', 
    redirect_uri : chrome.identity.getRedirectURL("oauth2") 
}; 

//ES6 template string! 
var requestUrl = `${STACK_APP.request_uri}?client_id=${STACK_APP.id}&scope=${STACK_APP.scope}&redirect_uri=${STACK_APP.redirect_uri}`; 


//https://developer.chrome.com/extensions/identity 
//https://developer.chrome.com/extensions/app_identity#update_manifest 
chrome.identity.launchWebAuthFlow({ 
    url   : requestUrl, 
    interactive : true 
}, function (url) { 
    console.log('redirected to: ' + url); 
}); 

Обратите внимание на redirect_uri - это заканчивает тем, что подобласть chromiumapp.org, поэтому вам нужно перечислить, что в StackApps, как домена для вашего приложения (позволяя oAuth продолжать).

Смежные вопросы