全部,我正在使用wordpress,并试图让我的用户登录facebook。在Wordpress的header.php中,我有以下代码:
define('123', '123');
//uses the PHP SDK. Download from https://github.com/facebook/php-sdk
require 'facebook.php';
$facebook = new Facebook(array(
'appId' => '123',
'secret' => '12345',
'cookie' => true,
));
$uid = $facebook->getUser();
if ($uid) {
try {
$userInfo = $facebook->api('/' + $uid);
$qry = "Select user_id, role from event_details where email_address='$userInfo[email]'";
echo $qry;
$result = mysql_query($qry);
$resultrows = mysql_num_rows($result);
if($resultrows>0){
$resultset = mysql_fetch_array($result);
$_SESSION['user_id'] = $resultset['user_id'];
$_SESSION['role'] = $resultset['role'];
$target = "http://www.website.com/event_choices";
header("Location:". $target);
}
} catch (FacebookApiException $e) {
error_log($e);
}
}else{
echo "not logged into facebook";
}
if ($uid) {
$logoutUrl = $facebook->getLogoutUrl();
} else {
$loginUrl = $facebook->getLoginUrl(array(
'next'=>'http://www.website.com/event_choices'
));
}
然后,当我在Wordpress中创建一个页面时,我有以下代码:
<?php if ($uid): ?>
<?php echo "Welcome, ".$uid['first_name']. ".<br />"; ?>
<a href="<?php echo $logoutUrl; ?>">
<img src="http://static.ak.fbcdn.net/rsrc.php/z2Y31/hash/cxrz4k7j.gif">
</a>
<?php else: ?>
<a href="<?php echo $loginUrl; ?>">
<img src="http://static.ak.fbcdn.net/rsrc.php/zB6N8/hash/4li2k73z.gif">
</a>
<?php endif ?>
这会显示登录按钮,但每当我单击该按钮时,都不会发生任何事情。当我查看源代码时,$loginUrl没有被填充。我做错了什么?
谢谢!
生成登录URL时没有传递范围,这是传递所有应用程序权限的地方。看看:
$loginUrl = $facebook->getLoginUrl(
array(
'scope' => 'email,offline_access,publish_stream,user_birthday,user_location,user_work_history,user_about_me,user_hometown',
'redirect_uri' => 'http://www.website.com/event_choices'
)
);
有关更多信息,请参阅此处的API参考资料。
此外,在与Facebook合作时,有时从FB获得一些输出以了解可能存在的问题是很重要的。你可以这样包装你的代码:
try {
$user = $facebook->getUser();
//you can also put your loginURL generation code here to see if you get an error
} catch(Exception $o){
print_r($o);
}