使用facebook应用程序对weblink进行一次性身份验证


one time authentication for weblink with facebook app

我想用我的网站验证我的facebook个人资料,这样我就可以从页面中提取信息。有人建议我通过临时页面使用facebookapi进行身份验证。有点像:

<fb:login-button params="some permission" />

我刚开始编写facebook应用程序。但这看起来像fbml。我如何使用它来验证我的网站与我自己的个人资料。我不需要用户登录我的网站。我只需要从我的页面中提取信息。

facebook的文档稀疏且零散。登录时我得到的只是这个代码片段。我不明白如何通过这种方法验证网络链接。

FB.login(function(response) {
  if (response.session) {
    // user successfully logged in
  } else {
    // user cancelled login
  }
});

有人能扔点光吗??

让我们从头开始:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml" xml:lang="en" lang="en">

这是fbml工作所必需的。下一篇:

<fb:login-button autologoutlink="true"></fb:login-button>
<div id="fb-root"></div>  

这两行创建了"facebook登录按钮",你应该把它们放在你想要按钮出现的html中。

就在你的闭幕式之前添加标签:

<script type="text/javascript" src="https://connect.facebook.net/en_US/all.js"></script>
<script>
    window.fbAsyncInit = function() {
        FB.init({appId: 'YOUR APP ID HERE', status: true, cookie: true, xfbml: true});
        FB.Event.subscribe("auth.login", function(response) {
            if(response.session) {                      
                      // this is where you handle facebook's response 
            }
        });
    };
</script>

你在这里要做的是首先初始化与facebook的连接,使用你的应用程序id(你需要创建一个应用程序),并注册一个"auth.login"事件。每次你点击脸书登录按钮并成功登录脸书,或者脸书根据他们的cookie自动登录时,都会触发auth.login事件。

您可以在这里找到auth.login和其他事件的解释,查看左侧边栏,所有事件都已列出。

响应是JSON格式的,它包含您的基本会话信息:

{
    status: 'connected',
    session: {
        access_token: '...',
        expires:'...',
        secret:'...',
        session_key:'...',
        sig:'...',
        uid:'...'
    }
}

你可以在这里阅读更多关于它的信息。如果你的状态确实是"连接"的,那么下一个最重要的信息就是uid,这是你唯一的facebook标识符,一个公共id,你可以用它向facebook发送进一步的请求。你如何处理回应取决于你自己。一个明显的选择是通过ajax将其发送到一个脚本中,该脚本将您登录到应用程序中。

要从facebook获得更多信息,您需要下载php-sdk。使用sdk:

<?php
include_once "facebook-sdk-3.0.0/src/facebook.php";
$appID     = "YOUR APP ID";
$appSecret = "YOUR APP SECRET";
$cookie = "fbs_{$appID}";
$cookie = isset($_COOKIE[$cookie]) ? trim($_COOKIE[$cookie], '"') : "";
if(empty($cookie)) {
    echo "no facebook cookie";
    die();
}
parse_str($cookie, $data);
$facebook = new Facebook(array(
  "appId"  => $appID,
  "secret" => $appSecret,
  "cookie" => true           
));        
$facebook->setAccessToken($data["access_token"]);
$user = $facebook->getUser();
$profile = $facebook->api("/me");
?>  

因此,一开始你解析facebook的cookie,它名为"fbs_YOUR_APP_ID",包含你的会话信息(url编码)。您实际需要的是access_token(经过身份验证的会话的唯一标识符),它以前也在JSON响应对象中返回给您。然后通过你可以做的Facebook对象和你想要的api请求。

现在,要拥有完整的身份验证机制,您应该创建一个类似的连接脚本,而不是从cookie中获取会话信息,而是从auth.login发生时返回的响应对象中获取这些信息(可能通过ajax)。

您应该阅读身份验证工作流文档,以更好地了解facebook连接的工作原理。

处理Facebook身份验证的一个好而简单的方法是使用Facebook PHP SDK实现服务器端流(请参阅github)。所以你会有这样的东西:

require "facebook.php";
$facebook = new Facebook(array(
    'appId'  => YOUR_APP_ID,
    'secret' => YOUR_APP_SECRET,
));
$user = $facebook->getUser();

如果用户登录,则$user是他的Facebook ID。然后,您必须通过调用API来检查您是否有有效的访问令牌:

  • 如果它没有引发任何异常,则您有一个有效的访问令牌

  • 如果是,则必须重新验证用户。

此处:

if ($user) {
  try {
    $facebook->api('/me');
  } catch (FacebookApiException $e) {
    $user = null;
  }
}

然后,您需要显示登录或注销链接:

<?php if ($user): ?>
    <a href="<?php echo $facebook->getLogoutUrl() ?>">Logout of Facebook</a>
<?php else: ?>
    <a href="<?php echo $facebook->getLoginUrl() ?>">Login with Facebook</a>
<?php endif ?>

当用户登录并且您拥有有效的访问令牌时,您可以进行API调用以从Facebook获取数据:

$user_profile = $facebook->api('/me');

您可能想查看Facebook PHP SDK的示例页面,该页面有很好的文档记录。

希望能有所帮助。