Facebook graph api 从Facebook获取长寿访问令牌

Facebook graph api 从Facebook获取长寿访问令牌,facebook-graph-api,Facebook Graph Api,据我所知,Facebook最近决定删除离线访问权限,并引入了一个称为长寿命访问令牌的概念,该令牌最长可使用60天。是否有人知道如何使用Facebook JavaScript SDK获取此访问令牌 有一种方法可以将此延长到60天。此处描述: 在场景4:客户端OAuth和通过新端点延长访问令牌到期时间下 编辑: 为了扩展访问令牌,您需要使用短期访问令牌发出以下请求: https://graph.facebook.com/oauth/access_token? cli

据我所知,Facebook最近决定删除
离线访问
权限,并引入了一个称为长寿命访问令牌的概念,该令牌最长可使用60天。是否有人知道如何使用Facebook JavaScript SDK获取此访问令牌

有一种方法可以将此延长到60天。此处描述: 在
场景4:客户端OAuth和通过新端点延长访问令牌到期时间下

编辑: 为了扩展访问令牌,您需要使用短期访问令牌发出以下请求:

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 

由于Facebook中存在漏洞,一些用户将不得不在Facebook发布长寿令牌之前对该应用程序进行未授权。

在javascript中添加以下详细信息:我希望它对您有用

function getLongLiveToken(data){

        FB.api('oauth/access_token', {
            client_id: data.client_id, // FB_APP_ID
            client_secret: data.secret, // FB_APP_SECRET
            grant_type: 'fb_exchange_token',
            fb_exchange_token: data.access_token // USER_TOKEN
        }, function (res) {
            if(!res || res.error) {
                console.log(!res ? 'error occurred' : res.error);
            }else{
                var accessToken = res.access_token;
                if(typeof accessToken != 'undefined'){
                }
            }
        });
    }

我刚刚使用“axios”调用了Facebook Graph API。您可以从应用程序仪表板中找到客户端id和客户端密码

getLongLiveToken = () => {
    window.FB.getLoginStatus(function(response) {
        if (response.status === 'connected') {
            let userAccessToken = response.authResponse.accessToken;
            axios.get(`https://graph.facebook.com/oauth/access_token?client_id=${clientId}&client_secret=${clientSecret}&grant_type=fb_exchange_token&fb_exchange_token=${userAccessToken}`)
            .then((response) => {
                console.log("Long Live Access Token");
                console.log(response.data.access_token);
             });
           }
       });
    }
<button onClick={ () => this.getLongLiveToken() } >Long Live Token</button>
getLongLiveToken=()=>{
window.FB.getLoginStatus(函数(响应){
如果(response.status===“已连接”){
让userAccessToken=response.authResponse.accessToken;
axios.get(`https://graph.facebook.com/oauth/access_token?client_id=${clientId}&client\u secret=${clientSecret}&grant\u type=fb\u exchange\u token&fb\u exchange\u token=${userAccessToken}`)
。然后((响应)=>{
log(“长寿访问令牌”);
console.log(response.data.access_令牌);
});
}
});
}
this.getLongLiveToken()}>Long-Live Token

当我的当前访问令牌在60天后每次都被释放时,我是否需要交换当前访问令牌以获取新的访问令牌。现在,当我将离线访问作为scop参数传递时,它似乎没有考虑它,只是在几个小时内将我的访问令牌导出。你能解释一下我是如何通过facebook JavaScript sdk获得长寿访问令牌的吗。是否有任何设置或特殊参数需要随附发送。您无法使用js sdk获取60天访问令牌。您只能在首先收到短期访问令牌后将其延长到60天。有没有办法在没有用户交互的情况下再次延长此60天?请注意,根据,由于此请求发送APP_机密(并检索长期用户令牌),因此不应在客户端执行此操作,而是在服务器上。@Excaliber:将APP_SECRET作为get参数发送仍然有点冒险。它在路由中可见,可以存储在访问日志中。最好是作为post参数发送。由于这是一个https调用,因此将对其进行加密。也许facebook采用这种方式是因为相同的来源/跨域规则。如果他们把它放在服务器端SDK中就好了。7小时后,我的头撞在屏幕上,从我的帐户中删除了应用程序,并返回了long live token。即使客户端密码正确,这是“验证客户端密码错误”错误吗?不要从客户端打电话,将短令牌发送到服务器,并在后端使用此类令牌,因为它包含应用程序机密。你能告诉我吗!!!你更喜欢哪种编程语言。使用你在后端使用的任何东西,我个人使用python。