Токен доступа fb всегда истекает в приложении ember

Я использую ember-simple-auth и ember-cli-facebook-js-sdk. Я использую ember-cli-facebook-sdk, потому что я хочу получить пользовательское фото в любое время, так как Facebook дает доступ, срок действия которого истекает через 60 минут. Так что я не могу сохранить также.Ember-cli-facebook-sdk работает нормально. Но иногда я получаю сообщение об ошибке в сетевой консоли.

{"error":{"message":"An active access token must be used to query information about the current user.","type":"OAuthException"}

Я не могу думать, почему эта ошибка происходит. У меня есть инициализатор, который имеет идентификатор Facebook и версию API. И теперь я использую Fb.api и другие в моем контроллере, компоненте и прочем. Но иногда это не получается. Пожалуйста, где Я иду не так. Спасибо заранее.

инициализатора / fb.js

import FB from 'ember-cli-facebook-js-sdk/fb';

export default {
  name: 'fb',
  initialize: function() {
    return FB.init({
      appId: '1234567',
      version: 'v2.3',
      xfbml: true
    });
  }
};

controller.js

usrphoto:Ember.computed('model',function(){
          var currentState = this;
          FB.api('/me/picture','Get',{'type':'large'}).then(function(response) {
            currentState.set('usrphoto', response.data.url)
            })
      }

1 ответ

Решение

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

FB.getLoginStatus().then(function(response) {
  if (response.status === 'connected') {
    return Ember.RSVP.resolve();
  } else {
    return FB.login('email,user_photos'); //set your scope as needed here
  }
}).then(function() {
  return FB.api('/me/picture','Get',{'type':'large'});
}).then(function(response) {
  currentState.set('usrphoto', response.data.url);
});

Другая возможность - обработать ошибку в улове FB.api:

FB.api('/me/picture','Get',{'type':'large'}).then(function(response) {
  currentStatte.set('userphoto', response.data.url);
}).catch(function(reason) {
  ...handle your error here...
});
Другие вопросы по тегам