Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Facebook访问令牌在每次页面加载时都会发生变化_Javascript_Facebook_Api_Facebook Graph Api - Fatal编程技术网

Javascript Facebook访问令牌在每次页面加载时都会发生变化

Javascript Facebook访问令牌在每次页面加载时都会发生变化,javascript,facebook,api,facebook-graph-api,Javascript,Facebook,Api,Facebook Graph Api,Facebook API访问令牌在每次页面加载时都会更改,这正确吗 我认为一旦获得代币,它将保持不变,直到到期 我正在使用Facebook的Javascript SDK Facebook表示,使用此SDK,无需手动管理访问令牌。SDK就是这么做的 但每次页面加载时令牌都会更改,这对吗 我的代码是: <div id="fb-root"></div> <script> window.fbAsyncInit = function() { FB.

Facebook API访问令牌在每次页面加载时都会更改,这正确吗

我认为一旦获得代币,它将保持不变,直到到期

我正在使用Facebook的Javascript SDK

Facebook表示,使用此SDK,无需手动管理访问令牌。SDK就是这么做的

但每次页面加载时令牌都会更改,这对吗

我的代码是:

  <div id="fb-root"></div>
   <script>
  window.fbAsyncInit = function() {
    FB.init({
      appId      : 'xxxxxxxx',
      status     : true,
      xfbml      : false,
      cookie     : true
    });
  };

  (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/all.js";
     fjs.parentNode.insertBefore(js, fjs);
   }(document, 'script', 'facebook-jssdk'));



function check() {
        FB.getLoginStatus(function(response) {
      if (response.status === 'connected') {
        // the user is logged in and has authenticated your
        // app, and response.authResponse supplies
        // the user's ID, a valid access token, a signed
        // request, and the time the access token 
        // and signed request each expire
        console.log(response);
        var uid = response.authResponse.userID;
        var accessToken = response.authResponse.accessToken;
      } else if (response.status === 'not_authorized') {
        // the user is logged in to Facebook, 
        // but has not authenticated your app
        console.log(response);
      } else {
        // the user isn't logged in to Facebook.
        console.log(response);
      }

     });



}


</script>

     <span onClick="check()">test</span>

window.fbAsyninit=函数(){
FB.init({
appId:'xxxxxxxx',
状态:正确,
xfbml:false,
曲奇:是的
});
};
(功能(d、s、id){
var js,fjs=d.getElementsByTagName[0];
if(d.getElementById(id)){return;}
js=d.createElement;js.id=id;
js.src=“//connect.facebook.net/en_US/all.js”;
fjs.parentNode.insertBefore(js,fjs);
}(文档“脚本”、“facebook jssdk”);
函数检查(){
FB.getLoginStatus(函数(响应){
如果(response.status===“已连接”){
//用户已登录并已验证您的身份
//app和response.authResponse提供
//用户ID、有效访问令牌、签名
//请求,以及访问令牌的时间
//和签名的请求都将过期
控制台日志(响应);
var uid=response.authResponse.userID;
var accessToken=response.authResponse.accessToken;
}else if(response.status===“未授权”){
//用户已登录到Facebook,
//但尚未验证您的应用程序
控制台日志(响应);
}否则{
//用户未登录到Facebook。
控制台日志(响应);
}
});
}
测试

Facebook最近改变了刷新访问令牌的过程

如果在您的情况下有效,请尝试使用此选项:

https://graph.facebook.com/oauth/access_token?
client_id=APP_ID&
client_secret=APP_SECRET&
grant_type=fb_exchange_token&
fb_exchange_token=EXISTING_ACCESS_TOKEN 
编辑:


这可能对你也有帮助

我刚刚测试了这个,你是对的,令牌会随着每次页面刷新而改变。不过,我不太担心,当使用一个SDK(JavaScript、PHP等)时,您很可能根本不需要考虑访问令牌。 即使您需要它们(例如,用于管理页面),您也可以使用最后一个

顺便说一句,“旧”代币仍然有效,不会失效。但无论如何,他们会在2小时后停止工作


还有第二个参数可以设置为“true”:(请参阅“Facebook服务器的往返”)——这可能解释了新令牌,但您也没有使用它。

如果您确实需要一个有效时间超过2小时的令牌,扩展您发布的访问令牌才是一个好主意。不过不是最近的变化。谢谢你的测试。我发现,如果在init()上,参数“status”设置为false,则不会更改。这样或那样,我同意我们可能不需要担心。