0

我正在尝试实现一个简单的 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