【问题标题】:Is the FB PHP SDK's getAccessToken() a reliable way to retrieve a user's auth token?FB PHP SDK 的 getAccessToken() 是检索用户身份验证令牌的可靠方法吗?
【发布时间】:2012-05-08 21:53:50
【问题描述】:

所以我有一个 FB 应用程序,在某些情况下,我需要我的 Javascript 使用与 index.php 位于同一域中的 php 文件将内容加载到 div 中。对于其中一些,我想确保用户仍然有效和/或需要身份验证令牌和 FB 用户 ID。我通过在 php 文件中创建一个 FB PHP SDK 的实例来实现这一点,该文件由 javascript 注入 ajax 并使用 getUser() 和 getAccessToken()。然而,我注意到,有时 getAccessToken() 调用会莫名其妙地失败并报告它需要一个有效的访问令牌来执行操作。

getAccessToken() 是确保用户登录 FB 的可靠(甚至是理想)方式还是我应该做其他事情(例如,将我从签名请求中解析的访问令牌存储在 Javscript 中并将其作为变量传递到我注入的 php 文件)?谢谢。

【问题讨论】:

    标签: php javascript session facebook-php-sdk facebook-oauth


    【解决方案1】:

    最可靠的可能是获取他们的详细信息。过去,我有一个“getUser”实例返回 true,但用户实际上并没有登录。所以现在我也得到了他们所有的细节,这更可靠:

    $facebook = new Facebook(array(
                                'appId' => FB_APP_ID,
                                'secret' => FB_APP_SECRET,
                                'cookie' => true
                        ));
    $FB_UID=false;
    try {
        $FB_UID = $facebook->getUser();
        // This verifies the user is actually logged in. teh above can return "true" but the following will crap out and throw exception
        $FB_me = $facebook->api('/me');  // 'birthday'
        // Not needed:
        // $FB_token = $facebook->getAccessToken();
    
    } catch (FacebookApiException $e) {
        $FB_UID = false;
        $FB_me = false;
        // $FB_token = false;
    }
    

    【讨论】:

    • 我明白了,然后我可以使用 ->api() 调用来执行删除用户的 FB 请求等操作,而实际上不需要访问他们的访问令牌?
    • 是的 - 如果您不使用“cookie”参数(或做一些花哨的事情,例如拥有访问令牌、存储在数据库中以备后用等),则需要访问令牌。如果是这种情况,a) 在用户连接时存储访问令牌,当您想使用该访问令牌时使用“setAccessToken()”,然后使用上面的“getUser”和“api(/me)”代码检查该访问令牌仍然有效。
    猜你喜欢
    • 2015-07-20
    • 2021-01-25
    • 2016-10-18
    • 2015-01-20
    • 1970-01-01
    • 1970-01-01
    • 2018-08-03
    • 2019-11-24
    • 2023-03-05
    相关资源
    最近更新 更多