【问题标题】:Can I store Facebook access token and use it later?我可以存储 Facebook 访问令牌并稍后使用吗?
【发布时间】:2011-01-05 20:11:26
【问题描述】:

我正在构建一个使用 FB 连接的网络应用程序 (PHP)。我在 facebook 提供的 PHP 库的帮助下成功注册/登录用户。我也可以使用此代码发布到墙上

        Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYPEER] = false;
    Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYHOST] = 2;               
    $facebook = new Facebook(array(
      'appId'  => $fb_key,
      'secret' => $fb_secret,
      'cookie' => true, // enable optional cookie support
    ));
    $session = $facebook->getSession();
    if ($session)
    {
        $facebook->api('/me/feed', 'POST', array('message'=>$message, 'link'=>$link['href'], 'name'=>$link['text']));                   
    }

但是,如果我手动转到浏览器的 cookie 管理器并删除存储 FB 会话的 cookie,则代码不起作用。我唯一拥有的是我存储在数据库中的用户 FB ID。即使FB会话丢失,是否有任何方法可以发布到用户的墙上?将用户的 FB 访问令牌存储在数据库中以便稍后发布到墙上是否有意义,或者访问令牌的寿命相对较短?

以下是我的应用中可能发生的示例情况: 用户单击 fb 按钮,授权我的应用程序,被重定向回我的网站,在那里我根据 FB 提供的数据自动创建一个帐户,我还存储了用户的 FB ID,以便我以后可以登录该用户。现在他浏览网站,输入一些信息,然后这些信息被发布到他的墙上。到目前为止一切都很好,因为用户的浏览器保存了 FB 创建的 cookie。现在用户离开站点并联系站点管理员。管理员打开他自己的浏览器,进入管理界面并代表该用户发布一些内容。现在,有了该用户的 FB ID 并假设该用户没有撤​​销权限,我还能将其发布到他的墙上吗?

【问题讨论】:

    标签: php facebook oauth facebook-graph-api fbconnect


    【解决方案1】:

    使用 Facebook PHP SDK v3 (see on github),询问和使用用户离线访问令牌非常简单。以下是你的做法。

    获取离线访问令牌

    首先检查用户是否登录:

    require "facebook.php";
    $facebook = new Facebook(array(
      'appId'  => YOUR_APP_ID,
      'secret' => YOUR_APP_SECRET,
    ));
    
    $user = $facebook->getUser();
    
    if ($user) {
      try {
        $user_profile = $facebook->api('/me');
      } catch (FacebookApiException $e) {
        $user = null;
      }
    }
    

    如果他不是,则生成“使用 Facebook 登录”URL 请求 offline_access 权限:

    if (!$user) {
        $args['scope'] = 'offline_access';
        $loginUrl = $facebook->getLoginUrl($args);
    }
    

    然后在你的模板中显示链接:

    <?php if (!$user): ?>
        <a href="<?php echo $loginUrl ?>">Login with Facebook</a>
    <?php endif ?>
    

    然后,当用户登录时,您可以检索离线访问令牌并存储它。要获得它,请致电:

    if ($user) {
        $token = $facebook->getAccessToken();
        // store token
    }
    

    使用离线访问令牌

    在用户未登录时使用离线访问令牌:

    require "facebook.php";
    $facebook = new Facebook(array(
      'appId'  => YOUR_APP_ID,
      'secret' => YOUR_APP_SECRET,
    ));
    
    $facebook->setAccessToken("...");
    

    现在您可以为该用户进行 API 调用:

    $user_profile = $facebook->api('/me');
    

    希望有帮助!

    【讨论】:

    • 绝妙的答案。您应该编写 Facebook 文档,因为它比现有的更好
    • 非常非常棒的解决方案,我搜索了 3 天。
    • 弗兰克,离线令牌现在已被弃用...您应该使用其他东西。
    【解决方案2】:

    更新:此答案不再有效,因为offline_access 已弃用。

    您需要申请offline_access 权限。查看permissions 文档。

    编辑根据更新和 cmets - 可以在 here 找到有关删除 offline_access 的一些信息。

    【讨论】:

    • 这将被弃用。尝试使用 60 天 access_token。
    猜你喜欢
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 2011-09-06
    • 2020-05-02
    • 2021-06-19
    • 2012-07-06
    • 1970-01-01
    相关资源
    最近更新 更多