0

自分の Web ページに簡単な Facebook ログイン (接続) を実装しようとしています。

私が見たいのは:(1)FBダイアログ(2)ユーザーが同意した場合、「yyyyy」を取得します(3)ユーザーが拒否した場合、「zzzzz」を取得します。

代わりに表示されるのは: (1) Go To App/Cancel を含む FB ダイアログ (2) ユーザーが同意した場合、「yyyyy」を取得 (3) ユーザーが拒否した場合、Go To App/Leave App を含む別の FB ダイアログ (4) ) ユーザーが再度拒否した場合、FB に入ります。

これがコードです(最初に実際の3つの値を隠しました):

<?php

session_start();

$app_id = 'xxxxxxxxxxxxxxx';
$app_secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$my_url = 'xxxxxxxxxxxxxxxxxxxxxxxxx';

require_once("facebook.php");
$config = array();
$config['appId'] = $app_id;
$config['secret'] = $app_secret;
$config['fileUpload'] = false; // optional
$facebook = new Facebook($config);

$ok_to_continue = false;
$code = $_REQUEST["code"];

if(empty($code)) {
  $_SESSION['state'] = md5(uniqid(rand(), TRUE)); // CSRF protection
  $dialog_url = "https://www.facebook.com/dialog/oauth?client_id=" 
    . $app_id . "&redirect_uri=" . urlencode($my_url) . "&state=" . $_SESSION['state'];
  echo("<script> top.location.href='" . $dialog_url . "'</script>");
}
else { // $code not empty
  if($_SESSION['state'] && ($_SESSION['state'] === $_REQUEST['state'])) {
    $token_url = "https://graph.facebook.com/oauth/access_token?"
      . "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url)
      . "&client_secret=" . $app_secret . "&code=" . $code;
    $response = file_get_contents_curl($token_url);
    $params = null;
    parse_str($response, $params);
    if (isset($params['access_token'])) {
      $_SESSION['access_token'] = $params['access_token'];
      $ok_to_continue = true;
    } else {
      oops('Error 2', '');
      echo ('<p>==='.$response.'===</p>');
    }
  } else {
    oops('Error 1', '');
  }
}

// Get user data:
if ($ok_to_continue) {
  $user_id = $facebook->getUser();
  if ($user_id) {
    try {
      $user_profile = $facebook->api('/me');
    } catch (FacebookApiException $e) {
      oops('Error 3', $e);
    }
  }
}

function file_get_contents_curl($url) {
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  $data = curl_exec($ch);
  curl_close($ch);
  return $data;
}

function oops($errmsg, $logmsg) {
  global $ok_to_continue;
  $ok_to_continue = false;
  if ($errmsg !== '') { echo('<p><b>' . $errmsg . '</b></p>'); }
  if ($logmsg !== '') { error_log($logmsg); }
}

?>

<?php if ($ok_to_continue): ?>

yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy

<?php else: ?>

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

<?php endif; ?>
4

0 に答える 0