2

我实际上试图找到解决方案,但什么也没有,我希望我能在这里找到解决方案!

我在我的网站中使用 facebook connect,当我登录 facebook 时一切正常,我通过 facebook connect 自动登录到我的网站,反之亦然。

现在我试图让它成为一个 facebook 应用程序,但我遇到了以下问题:我尝试在 facebook iframe 中运行,但不幸的是我没有自动登录。有时它可以工作,有时什么也没发生,有时我会收到这条消息:(可以没有获得 Facebook 会话。您的服务器可能无法安全地 Facebook 连接到用户以检索信息。)

我正在使用一些代码:

include 'includes/facebook.php';

$facebook = new Facebook(array(
  'appId'  => $setting['facebook_appid'],
  'secret' => $setting['facebook_secret'],
  'cookie' => true, // enable optional cookie support
));

if ($facebook->getUser()) {
$facebook_session = 1;

try {
  $fb_user = $facebook->api('/me');
} catch (FacebookApiException $e) {
  error_log($e);
}

function get_facebook_cookie($app_id, $application_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 . $application_secret) != $args['sig']) {
    return null;
  }
  return $args;
}

$cookie = get_facebook_cookie($setting['facebook_appid'], $setting['facebook_secret']);

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

if ($open != FALSE) {
    $fbdata = json_decode($open);
    $fb_user = array();

    foreach($fbdata as $key => $fbdata2) {
        $fb_user[$key] = $fbdata2;
    }
}

}
else {
    $facebook_session = 0;
}

ps:我当然使用的是安全画布 URL

请帮忙 !提前致谢

4

1 回答 1

0

我的 Facebook Connect 登录运行良好,但在 Facebook Canvas/iFrame 中却没有,它根本无法运行。我不得不更改我的登录方法(现在 facebook 用户必须能够在您的应用程序中自动登录),对我来说基本上有用的是:如何在画布中使用重定向授权 Facebook 应用程序?

这是我之前的(我使用的是 CakePHP):

$params = array(
   'scope' => 'email'
);

$loginUrl = $facebook->getLoginUrl($params);
$this->redirect($loginUrl);

我把它改成了这个效果很好:

$loginUrl = $facebook->getLoginUrl(
        array(
            'canvas' => 1,
            'fbconnect' => 0,
            'req_perms' => 'publish_stream'
        )
    );
echo '<script>top.location="'.$loginUrl.'";</script>';

我不确定这是否真的对您有帮助,因为您的应用程序似乎比我的更复杂,但也许您可以通过这个答案或我链接到的帖子解决您的问题。

于 2012-05-25T15:43:35.637 回答