【问题标题】:I'm confused about OAuth / Facebook process我对 OAuth / Facebook 流程感到困惑
【发布时间】:2010-08-24 21:40:52
【问题描述】:

我已按照http://developers.facebook.com/docs/api#authorization 上的说明使用标准 PHP 库。一切正常,直到它重定向到我的网站。我不确定我要在这里做什么!当重定向发生时,我可以看到 facebook 谈到我用来在 URL 中请求 OAuth 令牌的关键。

但是我的意思是这样做呢?我是否编写了一个简单的脚本来获取新的“代码”值并向 facebook 页面发出请求,其中包含详细信息? php 库中是否没有调用来为我完成整个过程?

任何帮助表示赞赏。

【问题讨论】:

    标签: php facebook oauth


    【解决方案1】:

    这是代码在我的应用程序中的外观(本示例已简化)

    $code = $_REQUEST['code'];
    if ( $code )
    {
      $response = $facebook->api( '/oauth/access_token', 'GET', array(
          'client_id'     => $facebook->getAppId()
        , 'client_secret' => $facebook->getApiSecret()
        , 'redirect_uri'  => 'http://example.com/your/redirect/uri'
        , 'code'          => $code
      ) );
      parse_str( $response, $vars );
      $oauthToken = $vars['access_token'];
    
      // Persist this token in the session, DB, or wherever you want
    
    } else {
      switch ( $_REQUEST['error_reason'] )
      {
        case 'user_denied':
          // some sort of message here
          break;
      }
    }
    

    如果你像我一样创建了Facebook的子类,只需将上面的一些放入一个新方法中

    /**
     * Exchange an Access Code for an OAuth Token
     *  
     * @param string $accessCode
     * @param string $redirectUrl
     * 
     * @return string OAuth Token
     */
    public function getOauthTokenFromAccessCode( $accessCode, $redirectUrl )
    {
      $response = $this->api( '/oauth/access_token', 'GET', array(
          'client_id'     => $this->getAppId()
        , 'client_secret' => $this->getApiSecret()
        , 'redirect_uri'  => $redirectUrl
        , 'code'          => $accessCode
      ) );
      parse_str( $response, $vars );
      return $vars['access_token'];
    }
    

    这简化了客户端代码

    $code = $_REQUEST['code'];
    if ( $code )
    {
      $oauthToken = $facebook->getOauthTokenFromAccessCode(
          $code
        , 'http://example.com/your/redirect/uri'
      );
    
      // Persist this token in the session, DB, or wherever you want
    
    } else {
      switch ( $_REQUEST['error_reason'] )
      {
        case 'user_denied':
          // some sort of message here
          break;
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-06-16
      • 2012-07-22
      • 2019-01-15
      • 2012-09-24
      • 1970-01-01
      • 2021-08-16
      • 1970-01-01
      • 2016-11-18
      • 1970-01-01
      相关资源
      最近更新 更多