Facebook API - токен за достъп за уеб приложение

Създавам уеб приложение, което изтегля най-новите публикации от страницата ни във Facebook и ги обработва. Всичко това работи добре с твърдо кодиран токен за достъп, генериран от тази страница.

Проблемът е, че този токен изтича, така че търся решение за генериране на нов токен при всяко зареждане на страницата или неизтичащ токен - (някъде прочетох, че неизтичащите токени вече не съществуват).

Така че, разбира се, проучих малко, тук, тук и тук.

Но никой от тези примери не изглежда да работи.

Преди всякакви оплаквания за някакъв код, който съм пробвал досега, това е моят работещ пример - с изтичащ токен за достъп:

var Facebook = function () {
    this.token = 'MYTOKEN';
    this.lastPost = parseInt((new Date().getTime()) / 1000);
    this.posts = [];
};

Facebook.prototype.GetPosts = function () {
    var self = this;
    var deffered = $q.defer();
    var url =  'https://graph.facebook.com/fql?q=SELECT created_time, message, attachment FROM stream WHERE created_time < ' + self.lastPost + ' AND source_id = 437526302958567 ORDER BY created_time desc LIMIT 5&?access_token=' + this.token + '';
    $http.get(url)
        .success(function (response) {
            angular.forEach(response.data, function (post) {
                self.posts.push(new Post(post.message, post.attachment.media, post.attachment.media[0].src, post.created_time, 'facebook'));
            });
            self.lastPost = response.data[response.data.length -1].created_time;
            deffered.resolve(self.posts);
            self.posts = [];
        });
    return deffered.promise;
};
return Facebook;

Всяка помощ/предложение ще бъде високо оценено.


person Chancho    schedule 18.06.2014    source източник
comment
Втората връзка, която предоставихте, е решението, което използвам за получаване на неизтичащи токени за достъп, което работи за мен, но само ако използвате Graph Explorer във v1.0, а не v2.0. Това, което не ми харесва във вашия подход, е, че съхранявате Access Token във фронтенда, което означава, че всеки може да го види.   -  person Tobi    schedule 18.06.2014


Отговори (1)


Първо, важно е да запомните, че Facebook току-що стартира версия 2 на Graph API. От април 2014 г. нататък, ако имате проблеми с приложението си, трябва да ни кажете кога сте го създали във Facebook Developers (новите приложения използват версия 2 по подразбиране).

За да управлявате страници, приложението ви трябва да има manage_pages разрешение. Уверете се, че потребителят, за когото искате да управлявате фен страници, ви е упълномощил. Ако приложението ви използва версия 2, уверете се, че Facebook (персоналът на Facebook) ви е упълномощил да поискате от потребителите такъв вид разрешение, в противен случай приложението ви няма да работи.

След като получите своя токен, сменете го за постоянен токен (или токен с дълъг срок на валидност). Уверете се, че използвате токена на фен страницата, а не токена на потребителя.

Ако вместо това искате да четете потока от публични фен страници, имате нужда от токен за достъп с read_stream разрешения. Това разрешение трябва да бъде одобрено от Facebook (вижте по-горе) и този конкретен тип разрешение отнема време за одобрение, ако използвате версия 2 на Graph API. Ако използвате стария API (Версия 1), все още можете да го направите без предварително одобрение от страна на Facebook. URL адресът за искане на разрешение за четене на потока е както следва: https://www.facebook.com/dialog/oauth?client_id=$YOUR_APP_ID&redirect_uri=$YOUR_URL&scope=read_stream,manage_pages (в този случай добавих manage_pages, може да не ви трябва). Този URL адрес ще поиска оторизация. След като потребителят упълномощи приложението, ще бъдете пренасочени към URL адреса, който сте избрали, с променлива code=. В този момент извикайте този друг URL адрес:

 https://graph.facebook.com/oauth/access_token?client_id={$app_id}&redirect_uri=$someurl&client_secret={$app_secret}&code={$code}

Ще получите отговор, който съдържа променливата access_token=в него. Вземете този маркер за достъп, разменете го за дълъг, със следния URL адрес:

https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id={$app_id}&client_secret={$app_secret}&fb_exchange_token={$token_you_have_just_grabbed}

Отговорът ще ви даде знак, който продължава известно време. Преди това Facebook реши тези „токени с дълга продължителност“ да изтекат след един месец. Разбрах обаче, че може да са променили решението си: ако поставите потребителски маркер в програмата за отстраняване на грешки, ще видите, че той никога не изтича. Това е потокът на оторизация за потребители, които посещават с браузър. Има и поток за оторизация на приложението. Ако всичко, от което се нуждаете, е поток от вашата собствена фен страница, искате да направите следното (с Graph API V.1):

  • направете HTTP GET заявка, като използвате следния URL адрес: https://graph.facebook.com/oauth/access_token?type=client_cred&client_id={$app_id}&client_secret={$app_secret}

  • Използвайте получения маркер, за да направите друго HTTP GET извикване, така: https://graph.facebook.com/{$your_page_id}/feed?{$authToken}&limit=10 //ten posts

  • Декодирайте json обекта

Вие сте готови.

person tattvamasi    schedule 18.06.2014