所以,我正在使用FB登录按钮让用户登录。单击FB登录按钮后,用户将被重定向到名为fb_redirect.php的文件,以便php可以启动会话。
window.fbAsyncInit = function()
{
FB.init({
appId: '12345',
status: true,
cookie: true,
xfbml: true
});
FB.Event.subscribe('auth.login', function(response)
{
window.location = '/fb_redirect.php';
});
};
在fb_redirect文件中,我有以下内容:
session_start();
require("model/facebook_api/src/facebook.php");
$facebook = new Facebook(array(
'appId' => '12345',
'secret' => '12345'
));
$access_token = $facebook->getAccessToken();
$facebook->setAccessToken($access_token);
if($access_token != "")
{
$user = $facebook->getUser();
if($user != 0)
{
$user_profile = $facebook->api("/".$user);
$fb_id = $user_profile['id'];
$fb_first_name = $user_profile['first_name'];
$fb_last_name = $user_profile['last_name'];
$fb_email = $user_profile['email'];
$_SESSION['login'] = "true";
}
}
header("Location:index.php");
文件中发生的事情令人困惑。这真的很受欢迎。如果我已经登录到FB,然后尝试使用FB登录按钮登录我的站点,则会弹出一个屏幕然后快速消失。但是,它不会将我登录到我的网站。
如果我没有登录FB并尝试登录我的网站,会弹出一个屏幕并提示我登录FB。当我在弹出屏幕中成功登录FB时,会发生重定向。但是,当它发生时,我会收到一条错误消息,告诉我需要一个有效的访问令牌。其他时候,它只是重定向到主页而不设置会话。所以,我猜测甚至根本没有设置访问令牌。
我在某处读到可能需要手动设置访问令牌。所以,我试过了:
$facebook->setAccessToken($access_token);
但是,这没效果。
我不知道如何理解这一点。有什么想法吗?
答案 0 :(得分:1)
不知道它是否有帮助(因为,让我们面对它,FB SDK是非常通用的),但FB指南宁愿你在获得访问令牌之前得到用户;也许(只是一个理论),当你已经登录时,你的$ facebook对象无法使用访问令牌,直到你执行getUser()方法...我猜,似乎有理由在获得用户之前获取用户令牌。