2015-06-14 6 views
1

Я использую Emberjs, Ember Simple Auth и Torii (для провайдера facebook-oauth2).Emberjs get facebook friendlist

Я был в состоянии создать логин и выход из системы Facebook после этого урока http://www.programwitherik.com/ember-simple-auth-torii-example-application/

Для изучения целей, я пытаюсь получить мой Facebook список друзей, используя Ember Simple Auth и Тори не уверен, как настроить запрос в Эмберже. Я не смог найти каких-либо указаний в Интернете ..

Сначала я создал пользовательский REST адаптер:

// adapters/friendlists.js 

import DS from 'ember-data'; 

export default DS.RESTAdapter.extend({ 
    namespace: 'v2.3/me', 
    host: 'https://graph.facebook.com', 
    headers: { 
    "apiKey": '193080234948021' //api key is manually added. How can I get the api key from Ember Simple Auth/Torii session? 
    } 
}); 

Следующая модель:

// models/friendlists.js 

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    name: DS.attr(), 
    list_type: DS.attr() 
}); 

... и маршрут:

// routes/friendlists.js 

import Ember from 'ember'; 

import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin'; 

export default Ember.Route.extend(AuthenticatedRouteMixin, { 
    model: function(params) { 
    return this.store.find('friendlists'); 
    } 
}); 

Когда я иду на http://localhost:4200/friendlists Я получаю следующее в консоли:

[Сообщить только] Отказался для подключения к 'https://graph.facebook.com/v2.3/me/friendlists', потому что он нарушает следующего содержания директивы политики безопасности: «Connect-Src 'сам' WS: // Localhost: 35729 Ws: //0.0.0.0 : 35729 http://0.0.0.0:4200/csp-report ".

XMLHttpRequest не может загрузить https://graph.facebook.com/v2.3/me/friendlists. Недопустимый статус HTTP код 400

При посещении запроса HTTP:

{ «Ошибка»: { «сообщение»: «Активный маркер доступа должен использоваться для запроса информации о текущем пользователе . ", "типа": "OAuthException", "код": 2500}

Как я могу установить маркер доступа на Эмбер?

+0

ошибка что вам нужно использовать токен доступа, вы можете прочитать о них в документах facebook. что, как говорится, вы уверены, что хотите получить доступ к «друзьям», а не «друзьям»? это две разные вещи. – luschn

+0

Я пытаюсь найти друзей. Я получаю токен доступа, когда я вхожу в мое приложение trhough facebook, но я не мог найти никакой документации по Ember Simple Auth или Torii, как получить доступ к этому токену и использовать его в моем запросе на получение. – CyberJunkie

+0

все еще, я уверен, что вы не хотите, чтобы друзья, но друзья. но что бы то ни было, вы не должны начинать прямо со статьи из блога, начинайте читать здесь: https://developers.facebook.com/docs – luschn

ответ

3

Вы можете использовать API Facebook JS следующим образом:


// app/initializers/facebook.js 
export function initialize(container, app) { 
    app.deferReadiness(); 
    window.__facebook.then(function() { 
    app.advanceReadiness(); 
    }); 
} 

export default { 
    name: 'facebook', 
    initialize: initialize 
}; 

В index.html:

 

    <script> 
     (function(w) { 
     var dfd = Ember.RSVP.defer(); 
     w.__facebook = dfd.promise; 
     w.fbAsyncInit = function() { 
      FB.init({ 
      appId  : 'your-app-id', 
      xfbml  : true, 
      version : 'v2.3' 
      }); 
      define('FB', [], function() {return FB}); 
      dfd.resolve(FB); 
     }; 
     })(window); 

     (function(d, s, id){ 
     var js, fjs = d.getElementsByTagName(s)[0]; 
     if (d.getElementById(id)) {return;} 
     js = d.createElement(s); js.id = id; 
     js.src = "//connect.facebook.net/en_US/sdk.js"; 
     fjs.parentNode.insertBefore(js, fjs); 
     }(document, 'script', 'facebook-jssdk')); 
    </script> 
 

Хитрость выше необходим для того, чтобы отложить загрузку приложения до Facebook API загружен.

 

// adapters/facebook.js (helper function which wraps FB api with a promise) 
import Ember from 'ember'; 

export default function performMethod(path, method, params) { 
    method = method || 'get'; 
    return new Ember.RSVP.Promise(function(resolve, reject) { 
    FB.api(path, method, params, function(response) { 
     if (!response || response.error) { 
     reject(response && response.error); 
     } else { 
     resolve(response); 
     } 
    }); 
    }); 
} 
 
 

// adapters/friend.js 
import performMethod from './facebook'; 
import DS from 'ember-data'; 

export default DS.Adapter.extend({ 
    findRecord: function() {}, 
    createRecord: function() {}, 
    updateRecord: function() {}, 
    deleteRecord: function() {}, 
    findAll: function() { 
    return performMethod('me', 'get', {fields: 'friends'}).then(function(res) { return res.friends && res.friends.data; }); 
    }, 
    query: function() {} 
}); 
 
 

// models/friend.js 
import DS from 'ember-data'; 

export default DS.Model.extend({ 
}); 
 

Тогда вы используете его:

 

// routes/friends.js 
import Ember from 'ember'; 
import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin'; 

export default Ember.Route.extend(AuthenticatedRouteMixin, { 
    model: function() { 
    return this.store.findAll('friend'); 
    } 
}); 
 

Update (28/07/2015): есть аддон я рекомендую использовать: средство сообщения https://github.com/pitchtarget/ember-cli-facebook-js-sdk/

2

Если вы хотите сделать все это на стороне клиента, я бы использовал API-интерфейс Facebook JS вместо Graph API - это намного проще для этого случая использования.

+1

Спасибо! Ember Simple Auth или Tori может использовать JS api. Я проверю. Я удалил свое упоминание о графике api из моего вопроса. – CyberJunkie

0

Вы можете передать ?access_token={user_access_token} в URL-адресе, где {user_access_token} - действительный токен доступа пользователя.

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