我打算使用$facebook->getAccessToken()
,但查看代码,如果无法从getUserAccessToken()
返回结果,它似乎会给用户应用程序访问令牌(通过getApplicationAccessToken()
)。如果我是对的,这意味着从getAccessToken()
向用户传递访问令牌可以在某些情况下返回API秘密。
如何安全地获得访问令牌?
您可以使用getUser()
来确保在返回访问令牌之前拥有当前用户会话。EDIT:正如评论中提到的,这似乎不能与Facebook的PHP客户端功能一起工作。用户的cookie可以包含用户ID,但也可以包含无效(过期)的code
。PHP客户端将尝试用code
交换用户访问令牌,但会失败。所以getUser()
将返回一个用户ID,而getAccessToken()
将返回一个应用程序访问令牌。getUser()
不是检查用户访问令牌是否有效的有效方法。
如果你想要特别小心:Facebook应用令牌的所有形式的<app id>|<some hash, possibly your secret>
。您可以确保返回的访问令牌没有这种格式:
$token = $fb->getAccessToken();
$tokenParts = explode('|', $token, 2);
if ($tokenParts[0] != <your_app_id>) {
return $token;
} else {
return null;
}