如何在JavasScript SDK中设置Facebook Access(来自服务器)

Chr*_*kic 5 facebook facebook-graph-api facebook-javascript-sdk

如果我使用服务器端流来验证用户并获取访问令牌,我如何在JavaScript SDK中设置该访问令牌并使用它来从客户端进行调用?

Nit*_*mer 4

用户完成服务器端身份验证流程后,用户就已获得应用程序的授权,您所需要做的就是使用 FB.getLoginStatus方法

FB.getLoginStatus(function(response) {
    if (response.status === "connected") {
        console.log("authResponse: ", response.authResponse);
        FB.api("me", function(response2) {
            console.log("Hey there " + response2.name);
        });
    }
    else if (response.status === "not_authorized") {
        // user is logged in to facebook but hasn't authorized your app, should not happen if he went through the server side authentication
    }
    else {
        // user is logged out of facebook, also should not happen
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,您可以简单地使用 js sdk 来查询图表,无需手动获取令牌,但如果您仍然需要它,则应authResponse具有以下格式:

authResponse: {
    accessToken: "aaaaaaa",
    expiresIn: "bbbbbb",
    signedRequest: "cccccc",
    userID: "dddddd"
}
Run Code Online (Sandbox Code Playgroud)

编辑

如果用户登录 Facebook 并允许您的应用程序并与之交互,那么应该getLoginStatus返回有效的访问令牌。
在某些情况下,情况并非如此,其中之一是令牌已过期。

正如处理无效和过期的访问令牌中所述:

使用 Javascript SDK 实现身份验证的桌面 Web 和移动 Web 应用程序

调用 FB.getLoginStatus() 或确保在调用 FB.init() 时设置 status: true 意味着下次用户登陆您的应用程序并登录 Facebook 时,您将作为这些调用的结果传递给您的 authResponse 对象将包含一个新的、有效的访问令牌。

在这种情况下,这只是用户使用您的应用程序的行为,隐式生成新的访问令牌。