进一步Facebook登录Javascript错误

时间:2011-06-16 14:38:39

标签: php javascript facebook facebook-javascript-sdk

这有点是我之前问题的延伸。有点解决了,我仍然遇到错误。我正在使用Javascript指南here。我现在在页面的最后一个代码段,最底层。在我的页面顶部,我有以下代码(我的代码中定义了 APP ID SECRET ID ):

<?php

define('YOUR_APP_ID', '**APP ID**');
define('YOUR_APP_SECRET', '**SECRET ID**');

function get_facebook_cookie($app_id, $app_secret) {
  $args = array();
  parse_str(trim($_COOKIE['fbs_' . $app_id], '\\"'), $args);
  ksort($args);
  $payload = '';
  foreach ($args as $key => $value) {
    if ($key != 'sig') {
      $payload .= $key . '=' . $value;
    }
  }
  if (md5($payload . $app_secret) != $args['sig']) {
    return null;
  }
  return $args;
}

$cookie = get_facebook_cookie(YOUR_APP_ID, YOUR_APP_SECRET);

$user = json_decode(file_get_contents(
    'https://graph.facebook.com/me?access_token=' .
    $cookie['access_token']));

?>

但现在我得到了这些错误(谷歌搜索它们没有变得有用):

同样,我的应用ID正确显示在错误代码中。

Notice: Undefined index: fbs_**MY APP ID** in C:\wamp\www\_header.php on line 10
Notice: Undefined index: sig in C:\wamp\www\_header.php on line 18

是否可能是与WAMP相关的问题?提前谢谢。

4 个答案:

答案 0 :(得分:2)

这意味着$ COOKIE ['fbs '。$ app_id]不存在,这意味着COOKIE var为空(或未设置)

答案 1 :(得分:1)

检查括号。很多时候,括号层次结构中的简单混淆可以解决这些令人讨厌的错误。

答案 2 :(得分:0)

我添加了一个简单的检查来检查cookie中的var。 这对我有用。

function get_facebook_cookie($app_id, $application_secret) 
{
  $args = array();
  if (!isset($_COOKIE['fbs_' . $app_id])) {
     //BOOHOO, NO COOKIE;
     return $args;
  }

  parse_str(trim($_COOKIE['fbs_' . $app_id], '\\"'), $args);
  ksort($args);
  $payload = '';
  foreach ($args as $key => $value) {
    if ($key != 'sig') {
      $payload .= $key . '=' . $value;
    }
  }
  if (md5($payload . $application_secret) != $args['sig']) {
    return null;
  }
  return $args;
}

答案 3 :(得分:0)

为什么不使用Facebook PHP SDK?我已经这样做了,虽然不检查app秘密,但它对我有用:

// Read the cookie created by the JS API
$cookie = trim($_COOKIE['fbs_' . FB_APP_ID], '\\"');
parse_str($cookie, $data);

// Startup the Facebook object
$fb = new Facebook(array(
    'appId'  => FB_APP_ID,
    'secret' => FB_APP_SECRET
));

// Say we are using the token from the JS
$fb->setAccessToken($data['access_token']);

// It should work now
var_dump($fb->getUser());

请注意$ COOKIE ['fbs '。只有在JavaScript上调用FB.login方法后,FB_APP_ID]变量才可用。

还要确保在初始化JS API时允许从PHP读取cookie,如下所示:

FB.init({
    appId  : 'YOUR APP ID',
    cookie : true
});

希望它有所帮助。

链接到PHP SDK的github:https://github.com/facebook/php-sdk/