Я запутался в процессе OAuth / Facebook - PullRequest
2 голосов
/ 24 августа 2010

Я следовал инструкциям на http://developers.facebook.com/docs/api#authorization, используя стандартную библиотеку PHP.Все отлично работает, пока не перенаправит на мой сайт.Я не уверен, что я должен делать здесь!Когда происходит перенаправление, я вижу, что ключ Facebook сообщает о том, что я использую, чтобы запросить токен OAuth в URL.

Но что мне с этим делать?Пишу ли я простой скрипт, который принимает новое значение «код» и помещает запрос на страницу facebook с включенным в детали?Разве нет вызова в библиотеке php, чтобы сделать весь этот процесс для меня?

Любая помощь приветствуется.

1 Ответ

5 голосов
/ 24 августа 2010

Вот как выглядит код в моем приложении (упрощенно для этого примера)

$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;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...