Facebook graph api fb访问令牌在ember应用程序中始终过期

Facebook graph api fb访问令牌在ember应用程序中始终过期,facebook-graph-api,ember.js,ember-cli,facebook-sdk-4.0,ember-addon,Facebook Graph Api,Ember.js,Ember Cli,Facebook Sdk 4.0,Ember Addon,我使用的是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

我使用的是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 id和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)
            })
      }

我想这里发生的是,你的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...
});

我想这里发生的是,你的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...
});

@Hillboy我已经编辑了代码。@Hillboy我已经编辑了代码。但是对于登录,我正在使用ember simple auth Addon,当我检查登录状态时,如果失败并返回fb.login。它会为fb打开一个新的对话框吗permission@MarutiNandan如果用户已接受应用权限,则不会显示任何对话框(事实上,它会很快打开和关闭)但对于登录,我在检查loginStatus时使用ember simple auth Addon,如果失败并返回fb.login。它会为fb打开一个新对话框吗permission@MarutiNandan如果用户已接受应用权限,则不会显示任何对话框(实际上,它会很快打开和关闭)