Как мне получить новый OAuth 2.0 Facebook access_token с JavaScript в Google Chrome Extention? - PullRequest
2 голосов
/ 30 декабря 2011

Я хочу создать простое расширение Google Chrome, которое будет отображать новости из Facebook.

Лента новостей можно получить, позвонив по этому адресу:https://graph.facebook.com/me/home?access_token=...

Но мне нужно access_token .

Может кто-нибудь дать подсказку, как определить функцию JavaScript, которая будет возвращать access_token при получении YOUR_APP_ID.Эта функция также должна работать внутри Chrome Extention.

Другие примеры в Интернете не работали, потому что:

  • У меня нет сервера.
  • FB.getLoginStatus не работает.

EDIT1 :

Я пробовал это:

    function getAccessToken2(YOUR_APP_ID) {
        alert("before FB.init");
        FB.init({
            appId  : YOUR_APP_ID ,
            status : true, // check login status
            cookie : true, // enable cookies to allow the server to access the session
            xfbml  : true  // parse XFBML
        });
        alert("before FB.login");
        FB.login( function (response) {
        alert("response");
            if ( response.authResponse ) {
                alert("response.authResponse");
                var access_token = response.authResponse.access_token;
                alert(access_token);
            }
        } );
    }

И у меня есть:

  • alert ("before FB.init");
  • alert ("before FB.login");
  • Открылось всплывающее окно.Это URL это .Содержание:

    API Error Code: 191
    API Error Description: The specified URL is not owned by the application
    Error Message: Invalid redirect_uri: Given URL is not allowed by the Application configuration.
    

Но я сделал НЕ получил:

  • alert ("response");
  • alert (access_token);
  • других ошибок JavaScript в режиме отладки не обнаружено.

Edit2 Проблема заключается в том, что мне нужно пройти аутентификациюна Facebook, как настольное приложение.ИМХО.

Ответы [ 2 ]

4 голосов
/ 02 января 2012

Facebook разрешает аутентификацию на рабочем столе, см. эту документацию

Вам нужно указать специальный return_uri, если вы используете расширение Chrome. https://www.facebook.com/connect/login_success.html)

Вам также необходимо добавить tabs и URL-адрес к вашим разрешениям манифеста - т.е.

"permissions": [
    "tabs",
    "https://facebook.com/connect/*"
]

Когда пользователь нажимает кнопку входа / авторизации, необходимо выполнить два шага:

Шаг 1

Перенаправить пользователя на страницу OAUTH:

chrome.tabs.create(
    {
    'url': "https://www.facebook.com/dialog/oauth?client_id=client_id>&redirect_uri=https://www.facebook.com/connect/login_success.html"
    }, null);

Шаг 2

Добавить слушателя обновлений вкладок, который ищет все вкладки для успешного URL:

chrome.tabs.onUpdated.addListener(function() {
    var lis = this; 
    chrome.tabs.getAllInWindow(null, function(tabs) {
                        for (var i = 0; i < tabs.length; i++) {
                            if (tabs[i].url.indexOf("https://www.facebook.com/connect/login_success.html") == 0) {
                                var token = tabs[i].url.match(/[\\?&#]auth_token=([^&#])*/i)
                                chrome.tabs.onUpdated.removeListener(lis);
                                return;
                            }
                        }
                    });
});

Обратите внимание, что у меня есть связанный вопрос об использовании javascript api для рабочего стола, поскольку я всегда получал одну и ту же ошибку API (191)

0 голосов
/ 30 декабря 2011
FB.login( function (response) {
    if ( response.authResponse ) {
        var access_token = response.authResponse.access_token;
        alert(access_token);
    }
} );
...