如何组合两个的示例
https://github.com/facebook/php-sdk/blob/master/examples/example.php和https://github.com/facebook/connect-js/blob/master/examples/jquery/login.html
最终目标是让我们可以使用jQuery登录,并且不知何故,下面的行仍然可以使用
$user = $facebook->getUser();
我目前注意到的是,当我使用JavaScript登录时,它没有用PHP设置会话,因此,它与基于PHP的SDK不兼容(因此在这种情况下$user仍然为null)
我不是CCD_ 1的铁杆粉丝,因为它会导致浏览器加载不同的页面(facebook登录),然后重定向回web应用程序。如果我能加载一个弹出框供用户登录,然后透明地重定向回我的网络应用程序,那就更理想了。因此,任何关于如何实现这种用户体验的建议都将不胜感激。非常感谢。
不确定是否能正常工作。当前的JS API有一个保存cookie的配置,因此服务器可以读取它:
FB.init({
appId : 'YOUR APP ID',
cookie : true
});
现在,在PHP中,您可以执行以下操作来使用JS中的会话:
// Read the cookie created by the JS API
$cookie = preg_replace("/^'"|'"$/i", "", $_COOKIE['fbs_' . FB_APP_ID]);
parse_str($cookie, $data);
// Startup the Facebook object
$fb = new Facebook(array(
'appId' => FB_APP_ID,
'secret' => FB_APP_SECRET
));
// Say we are using the token from the JS
$fb->setAccessToken($data['access_token']);
// It should work now
var_dump($fb->getUser());
希望它能有所帮助。
我只使用Facebook登录按钮-https://developers.facebook.com/docs/reference/plugins/login/
一旦用户使用它登录(如果他们还没有)并授予对您的应用程序(网站)的访问权限,PHP-SDK在使用Facebook会话和API时应该不会遇到任何问题。
更新
我刚刚在新版本3.0的PHP SDK中尝试了这一点,它肯定是不起作用的。在开发者博客上发现了这个
如果您将JavaScript SDK与PHP SDK结合使用进行登录,则需要等待JavaScript SDK升级(4周后)。由于cookie格式发生变化,PHP SDK 3.0.0版本将不会与当前的JavaScript SDK合作。
换句话说,在JS SDK更新之前,请使用v2 PHP SDK。
听起来facebook没有在正确的时间解决这个问题(正如他们所说https://developers.facebook.com/blog/post/503)。
这是关于js-sdk的最新信息https://developers.facebook.com/blog/post/525/
经过长时间的搜索,我发现这解决了PHP SDK无法接收Facebook会话的问题。显然,Javascript SDK没有以正确的方式设置会话。将此添加到您的auth.login
事件侦听器:
FB.Event.subscribe('auth.login', function(response) {
FB._oauth = false;
FB.Cookie.setEnabled(true);
FB.Auth.setSession(response.authResponse, response.status);
FB._oauth = true;
window.location.reload();
});
此外,请确保将应用程序域设置为与您的cookie域相匹配。在修复了这些项目后,它终于奏效了。
编辑:今天早上,一切都很好。当我刚刚测试更多内容时,我发现我必须编辑base_facebook.php,以确保对facebook的请求不会超时。我的猜测是,因为我在本地机器上进行测试,所以连接速度不够快,无法及时完成。这就解释了这种奇怪的行为,有时它会起作用,有时它不会起作用。
更改第128行$CURL_OPTS阵列中的connecttimeout:
public static $CURL_OPTS = array(
CURLOPT_CONNECTTIMEOUT => 20,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 60,
CURLOPT_USERAGENT => 'facebook-php-3.1',
);
在SDK的第4版中,它会自动与JavaScript SDK配合使用。您只需要使用FacebookJavaScriptLoginHelper
:
$helper = new FacebookJavaScriptLoginHelper(); // Get access token from JS SDK
try {
$session = $helper->getSession();
} catch(FacebookRequestException $e) {
// When Facebook returns an error
echo "Exception occured, code: " . $e->getCode();
echo " with message: " . $e->getMessage();
} catch('Exception $e) {
// When validation fails or other local issues
echo "Exception occured, code: " . $e->getCode();
echo " with message: " . $e->getMessage();
}
// If logged in
if($session) {
// Get user profile
try {
$user_profile = (new FacebookRequest(
$session, 'GET', '/me'
))->execute()->getGraphObject(GraphUser::className());
print_r($user_profile);
} catch(FacebookRequestException $e) {
echo "Exception occured, code: " . $e->getCode();
echo " with message: " . $e->getMessage();
}
}
没必要乱弄饼干!