我正在尝试创建一个允许用户使用其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来提供非常好的用户体验,但这似乎是不可能的。
登录.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's 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");
}
?>
您必须订阅登录事件才能获得回调,然后才能刷新页面。此外,对于注销,您应该使用自己的网站会话在Facebook登录旁边注销,所以假设您是否通过调用此函数从Facebook获取userid(意味着用户使用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/