0

我正在尝试创建一个允许用户使用其 Facebook 帐户登录的网站。当他们不在网站上时,我不需要提出任何请求或存储任何信息,因此我不需要数据库。

我只接受 Facebook 登录,不需要其他登录类型。我需要在登录页面上使用 Facebook 按钮进行典型登录,并能够让他们跨多个页面登录。我还想添加注销功能。

我已经下载了 PHP SDK,并且在我的页面上一起使用了 JavaScript SDK,但是我遇到了很多麻烦。

只是我还是 Facebook SDK 完全烂透了?

我的第一个问题是登录页面上的 JavaScript SDK 在身份验证后不会将用户重定向到主页。我目前正在手动刷新页面(PHP SDK意识到用户已登录并将用户发送到主页)。

另一个问题是注销。我正在使用 PHP SDK 的 getLogoutURL() 函数,它将用户从 Facebook 注销,但我的访问令牌仍然完全有效,并且 PHP 拒绝将用户发送到登录页面。为什么?我不知道。就个人而言,我希望用户退出我的网站而不是 Facebook。

我正在尝试使用 Facebook 制作无缝登录系统,但我遇到了麻烦!我似乎根本无法在 Facebook Connect 上找到任何好的文档。我正在使用他们的例子,这样的问题正在发生。也许他们只是无法制作出好的 SDK。我想使用 PHP SDK 和 JavaScript SDK 来提供非常好的用户体验,但这似乎是不可能的。

login.php 的 PHP 代码

require_once("../fb-sdk/src/facebook.php");

$Facebook = new Facebook(array(
  'appId'  => 'xx',
  'secret' => 'xx',
));

$User = $Facebook->getUser();

if ($User)
{
  try
  {
    // Proceed knowing you have a logged in user who's authenticated.
    $UserProfile = $Facebook->api("/me");
  } catch (FacebookApiException $e) {
    error_log($e);
    $User = null;
  }
}

if ($User)
{
  header("Location: index.php");
}

?>

login.php 的 JavaScript 代码

<div id="fb-root"></div>
<script>
  window.fbAsyncInit = function() {
    FB.init({
      appId      : 'xx', // App ID
      channelUrl : '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel File
      status     : true, // check login status
      cookie     : true, // enable cookies to allow the server to access the session
      xfbml      : true  // parse XFBML
    });
  };
  // Load the SDK Asynchronously
  (function(d){
     var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
     if (d.getElementById(id)) {return;}
     js = d.createElement('script'); js.id = id; js.async = true;
     js.src = "//connect.facebook.net/en_US/all.js";
     ref.parentNode.insertBefore(js, ref);
   }(document));
</script>
<div class="fb-login-button">Login with Facebook</div>

index.php 的 PHP 代码

require_once("../fb-sdk/src/facebook.php");

$Facebook = new Facebook(array(
  "appId"  => "xx",
  "secret" => "xx",
));

$User = $Facebook->getUser();

if ($User)
{
  try
  {
    // Proceed knowing you have a logged in user who's authenticated.
    $UserProfile = $Facebook->api("/me");
  } catch (FacebookApiException $e) {
    error_log($e);
    $User = null;
  }
}

if (!$User)
{
  header("Location: login.php");
}

?>
4

1 回答 1

1

您必须订阅登录事件才能获得回调,然后您才能刷新页面。此外,对于注销,您应该使用您自己的 SESSION 站点在 facebook 登录旁边进行登录注销,所以可以说如果您通过调用此函数从 facebook 获取用户 ID(意味着用户使用 facebook 登录)

$User = $Facebook->getUser();

然后在您的会话中设置类似的内容,并使用此变量检查用户在您的网络上的登录状态。

$_SESSION['LOGIN'] = 1;

当您注销时,您可以简单地取消设置此变量或销毁会话。

这是教程的链接,它为您提供有关 PHP / JS 中 facebook SDK 的更多详细信息

http://thinkdiff.net/facebook/graph-api-javascript-base-facebook-connect-tutorial/

http://thinkdiff.net/facebook/php-sdk-3-0-graph-api-base-facebook-connect-tutorial/

于 2012-08-12T02:11:11.023 回答