Javascript Facebook API-web应用程序的访问令牌

Javascript Facebook API-web应用程序的访问令牌,javascript,facebook,facebook-graph-api,facebook-javascript-sdk,Javascript,Facebook,Facebook Graph Api,Facebook Javascript Sdk,我正在制作一个网络应用程序,从我们的Facebook页面中提取最新的帖子并进行处理。 使用从页面生成的硬编码访问令牌,这一切都可以正常工作 问题是这个令牌过期了,所以我正在寻找一种解决方案,以便在每次加载页面时生成一个新令牌或一个非过期令牌(我在某个地方读到,非过期令牌不再存在) 所以我当然做了一些研究,然后 但这些例子中似乎没有一个起作用 在对我迄今为止尝试过的一些代码提出任何投诉之前,这是我的工作示例—使用过期的访问令牌: var Facebook = function () { t

我正在制作一个网络应用程序,从我们的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;
var=function(){
this.token='MYTOKEN';
this.lastPost=parseInt((new Date().getTime())/1000);
this.posts=[];
};
Facebook.prototype.GetPosts=函数(){
var self=这个;
var defered=$q.defer();
var url='1〕https://graph.facebook.com/fql?q=SELECT 通过created_time desc LIMIT 5和access_token='+this.token+''从创建_time<'+self.lastPost+'和source_id=437526302958567的流创建_time、消息和附件;
$http.get(url)
.成功(功能(响应){
角度.forEach(response.data,函数(post){
self.posts.push(新帖子(Post.message,Post.attachment.media,Post.attachment.media[0].src,Post.created_time,'facebook');
});
self.lastPost=response.data[response.data.length-1]。创建时间;
不同的解决方案(自我发布);
self.posts=[];
});
回报不同的承诺;
};
返回Facebook;

任何帮助/建议都将不胜感激。

首先,请记住Facebook刚刚发布了Graph API的第2版。从2014年4月起,如果你的应用程序出现问题,你需要告诉我们你是何时在Facebook开发者上创建的(新应用程序默认使用版本2)

要管理页面,您的应用程序需要具有
管理页面
权限。确保要为其管理风扇页面的用户已授权您。如果你的应用程序使用版本2,请确保Facebook(Facebook员工)已授权你向用户请求该类权限,否则你的应用程序将无法工作

获得代币后,将其兑换为永久代币(或有效期较长的代币)。确保使用风扇页面的令牌,而不是用户的令牌

如果您想读取公共风扇页面流,则需要具有
读取流
权限的访问令牌。如果您使用的是Graph API的版本2,则此权限需要Facebook批准(见上文),并且此特定类型的权限需要时间批准。如果您使用的是旧的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\u 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):

  • 使用以下URL发出HTTP GET请求:
    https://graph.facebook.com/oauth/access_token?type=client_cred&client_id={$app\u id}&client\u secret={$app\u secret}

  • 使用生成的令牌进行另一个HTTP GET调用,如下所示:
    https://graph.facebook.com/{$your\u page\u id}/feed?{$authToken}&limit=10
    //十篇文章

  • 解码json对象


您完成了。

您提供的第二个链接是我用来获取非过期访问令牌的解决方案,这对我来说很有用,但前提是您在v1.0而不是v2.0中使用图形浏览器。我不喜欢您的方法是将访问令牌存储在前端,这意味着每个人都可以看到它。