我想通过我的网站验证我的Facebook个人资料,以便我可以从页面中提取信息。 我被建议一次通过临时页面与facebook api进行身份验证。有点像:
<fb:login-button params="some permission" />
我是Facebook应用程序的新手。但这看起来像fbml。我如何使用它来使用我自己的个人资料验证我的网站。我不需要用户登录我的网站。我只需要从我的页面中提取信息。
facebook文档稀疏且碎片化。我得到的所有登录都是这段代码片段。我不明白我如何通过这种方法验证网络链接。
FB.login(function(response) {
if (response.session) {
// user successfully logged in
} else {
// user cancelled login
}
});
任何人都可以投光吗?
答案 0 :(得分:5)
让我们从开始:
开始<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>
您在这里做的是首先使用您的应用程序ID初始化与Facebook的连接(您需要创建一个应用程序),并注册“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标识符,一个公共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 requests。
现在要有一个完整的身份验证机制,你应该创建一个类似的连接脚本,而不是从cookie中获取会话信息,它应该从auth.login发生时返回的响应对象中获取它们(可能通过ajax)。 / p>
您应该阅读Authentication workflow文档,以便更好地了解Facebook连接的工作原理。
答案 1 :(得分: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。
希望有所帮助。