Как разобрать код аутентификации в API Facebook?Получение ошибок MySQL - PullRequest
0 голосов
/ 25 февраля 2011

Как правильно проанализировать код при аутентификации вашего приложения во время входа в систему?Я использую PHP для своего приложения.

Причина, по которой я спрашиваю, заключается в том, что я продолжаю получать странные запросы в MySQL всякий раз, когда я пытаюсь выполнить вставку в свою базу данных.Все вызовы API работают, но если я попытаюсь ввести данные пользователя (имя, адрес электронной почты, access_token), то после этого также будут выполнены три или четыре других запроса с пустыми значениями, каждый в разных строках.Это происходит только тогда, когда я пытаюсь получить код аутентификации через $ _REQUEST ['code'] или $ _SERVER ['QUERY_STRING'] после URL диалога.

Что странно, так это то, что у меня вообще не возникает проблем с MySQL, если я просто пытаюсь вызвать ту же страницу с $ code, жестко запрограммированным в нужное значение.Очевидно, я не могу оставить это так, поскольку код аутентификации всегда меняется, но это странно, потому что только тогда мой MySQL работает нормально.Кто-нибудь еще испытывал это?Возможно, кодовый ответ закодирован в другом формате?

Любая помощь будет принята с благодарностью, вот мой код:

$code = $_REQUEST['code'];

if (empty($code)) {
  $dialog_url = "http://www.facebook.com/dialog/oauth?client_id=" . $app_id .     
  "&redirect_uri=" . urlencode($redirect) . "&scope=offline_access,email";
  echo("<script> top.location.href='" . $dialog_url . "'</script>");
}

$response = urldecode($_SERVER['QUERY_STRING']);     
$code = substr($response,5);

$token_url = "https://graph.facebook.com/oauth/access_token?client_id=" 
            . $app_id . "&redirect_uri=" . urlencode($redirect) . "&client_secret=" .  
              $app_secret . "&code=" . $code;

$access_token = file_get_contents($token_url);
$user_url = "https://graph.facebook.com/me?" . $access_token;
$user = json_decode(file_get_contents($user_url));

$user_id = $user->id;
$email = $user->email;

// MYSQL insert queries into database

1 Ответ

0 голосов
/ 28 февраля 2011

Вы используете файл facebook php sdk?или вы делаете свой собственный обратный вызов авторизации?потому что это намного проще, пример:

////////////////////////////////////////////////////////
require_once('facebook.php');

$facebook = new Facebook(array(
  'appId'  => 'xxxxxxxxxxxxxxxxx',
  'secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
  'cookie' => true,
));
$session = $facebook->getSession();

$me = null;
// Session based API call.
if ($session) {
  try {
    $uid = $facebook->getUser();
    $me = $facebook->api('/me');

  } catch (FacebookApiException $e) {
    error_log($e);
  }
}


// login or logout url will be needed depending on current user state.
if ($me) {
  $logoutUrl = $facebook->getLogoutUrl();

   $sql=my_sql_fetch_array(mysql_query("SELECT * from mytable where id='".$me['id']."'"));

if($sql)
{
 $_SESSION["usr_id"] =$me['id'];
  $_SESSION["usr_name"]=$me['name'];
}
else{
mysql_query("insert into mytable (id,fbid,name) values(NULL,'".$me['id']."','".$me['name']."'");
$_SESSION["usr_id"] =$me['id'];
  $_SESSION["usr_name"]=$me['name'];
}

} else {
  $loginUrl = $facebook->getLoginUrl();
}


//i set sessions here or maybe some mysql commands like check if the user is already in the database and then set the sessions.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...