2011-05-27 89 views
5

我想验证我的脸书个人资料与我的网站,所以我可以拉从页面的信息。 我被建议一次通过临时页面与facebook api进行身份验证。有点像:一次性认证的网络链接与Facebook应用程序

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

我是新来的编码facebook应用程序。但这看起来像fbml。我如何使用它来通过我自己的配置文件来认证我的网站。我不需要用户登录到我的网站。我只需要从我的页面中提取信息。

Facebook的文档是稀疏和分片。我所有的登录是这段代码片段。我不明白我怎么可以通过这种方法验证一个网络链接。

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

任何人都可以抛出一些光?

回答

5

让我们从beggining开始:

<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“事件。每次您点击Facebook登录按钮并成功登录Facebook时,auth.login事件都会触发,或者Facebook会根据自己的Cookie自动登录您。

你可以找到auth.login和其他事件的解释here,看左边的边栏,列出所有的事件。

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

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

你可以阅读更多关于它here。如果你的状态确实是“连接”的,那么下一个最重要的信息就是uid,这是你唯一的facebook标识符,你可以向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"); 

?> 

所以刚开始你解析它被命名为“fbs_YOUR_APP_ID”,并包含会话信息(URL编码)的Facebook的cookie。您实际需要的是access_token(经过身份验证的会话的唯一标识符),该名称在之前也返回给JSON响应对象。然后通过你可以做的Facebook对象和你想要的api requests

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

您应该阅读Authentication workflow文档以更好地了解Facebook连接的工作原理。

+0

这将是我的网站一次性解决方案。我不希望我的网页的访客不得不允许任何Facebook的权限。我甚至不想要他们登录到Facebook .. – amit 2011-05-30 08:09:27

+0

是的,不幸的是,如果它只有你将被认证,没有区别。你将不得不实现认证才能工作的所有结构。您将不得不通过Facebook登录并允许您的应用程序使用您的数据,但Facebook无法确定您是否真的有人或试图访问您的应用程序。 – yannis 2011-05-30 08:18:11

+0

我可以实现上面的结构。但我的网站的用户还需要认证? – amit 2011-05-30 09:30:34

2

一个处理Facebook身份验证的好方法是使用Facebook PHP SDK(see on 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'); 

您可能需要检查有充分记录的example page of the Facebook PHP SDK

希望有所帮助。