使用facebook app对weblink进行一次身份验证

ami*_*mit 5 javascript php facebook

我想通过我的网站验证我的Facebook个人资料,以便我可以从页面中提取信息.我被建议一次通过临时页面与facebook api进行身份验证.有点像:

<fb:login-button params="some permission" />
Run Code Online (Sandbox Code Playgroud)

我是Facebook应用程序的新手.但这看起来像fbml.我如何使用它来使用我自己的个人资料验证我的网站.我不需要用户登录我的网站.我只需要从我的页面中提取信息.

facebook文档稀疏且碎片化.我得到的所有登录都是这段代码片段.我不明白我如何通过这种方法验证网络链接.

FB.login(function(response) {
  if (response.session) {
    // user successfully logged in
  } else {
    // user cancelled login
  }
});
Run Code Online (Sandbox Code Playgroud)

任何人都可以投光吗?

yan*_*nis 5

让我们从开始:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml" xml:lang="en" lang="en">
Run Code Online (Sandbox Code Playgroud)

这是fbml工作所必需的.下一个:

<fb:login-button autologoutlink="true"></fb:login-button>
<div id="fb-root"></div>  
Run Code Online (Sandbox Code Playgroud)

这两行创建"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>
Run Code Online (Sandbox Code Playgroud)

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

您可以在此处找到auth.login和其他事件的说明,请查看左侧的侧栏,列出所有事件.

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

{
    status: 'connected',
    session: {
        access_token: '...',
        expires:'...',
        secret:'...',
        session_key:'...',
        sig:'...',
        uid:'...'
    }
}
Run Code Online (Sandbox Code Playgroud)

你可以在这里阅读更多相关信息.如果你的状态确实是"连接"的,那么下一个最重要的信息就是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");

?>  
Run Code Online (Sandbox Code Playgroud)

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

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

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