我有一个名为fbmain.php的文件,它将对用户进行身份验证。
<?php
//set facebook application id, secret key and api key here
$fbconfig['appid' ] = "MY_APP_ID";
$fbconfig['secret'] = "MY_APP_SECRET";
$uid = null; //facebook user id
try{
include_once "facebook.php";
}catch(Exception $o){
echo '<pre>';
print_r($o);
echo '</pre>';
}
// Create our Application instance.
$facebook = new Facebook(array(
'appId' => $fbconfig['appid'],
'secret' => $fbconfig['secret'],
'cookie' => true,
));
//Facebook Authentication part
$session = $facebook->getSession();
//Get permission from user
$loginUrl = $facebook->getLoginUrl(
array(
'canvas' => 1,
'fbconnect' => 0,
'req_perms' => 'email,publish_stream,status_update'
)
);
if (!$session) {
echo "<script type='text/javascript'>top.location.href = '$loginUrl';</script>";
exit;
}
if ($session) {
try {
$uid = $facebook->getUser();
} catch (FacebookApiException $e) {
echo "<script type='text/javascript'>top.location.href = '$loginUrl';</script>";
exit;
}
}
//signed_request part
$signed_request = $_REQUEST['signed_request'];
$secret = $fbconfig['secret'];
$data = parse_signed_request($signed_request, $secret);
$fan_page_id = $data['page']['id'];
$admin_check = $data['page']['admin'];
$like_check = $data['page']['liked']; //New
//Get fan page id
function parse_signed_request($signed_request, $secret) {
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
// decode the data
$sig = base64_url_decode($encoded_sig);
$data = json_decode(base64_url_decode($payload), true);
if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') {
error_log('Unknown algorithm. Expected HMAC-SHA256');
return null;
}
// check sig
$expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
if ($sig !== $expected_sig) {
error_log('Bad Signed JSON signature!');
return null;
}
return $data;
}
function base64_url_decode($input) {
return base64_decode(strtr($input, '-_', '+/'));
}
?>我已经将fbmain.php文件包含到我的index.php文件中,并访问了用户数据。
,然后我想访问用户birthday.So,我添加了对fbmain.php file.code的'user_birthday‘权限引用如下
//Get permission from user
$loginUrl = $facebook->getLoginUrl(
array(
'canvas' => 1,
'fbconnect' => 0,
'req_perms' => 'email,publish_stream,status_update,user_birthday'
)
);index.php文件的代码如下所示
<?php
//index.php file
include_once "fbmain.php";
$me = $facebook->api('/me');
$_SESSION['id'] = $me['id'];
$_SESSION['name'] = $me['name'];
$_SESSION['link'] = $me['link'];
$_SESSION['email'] = $me['email'];
if($me['birthday'] == null){ ?>
<script>
top.location = 'http://www.facebook.com/dialog/oauth?client_id=MY_APP_ID&redirect_uri=MY_REDIRECT_URL&scope=user_birthday';
</script>
<?php }else{ ?>
//Some other codes
<?php } ?>如果$me‘生辰’返回空值,我将用户重定向到权限窗口,请求用户的生日。由于后来我将user_birthday添加到权限引用的范围,所以我不得不添加这个部分。
对某些用户有效,并显示请求访问用户生日的“请求权限”窗口。
但是对于一些用户来说,它会显示一条facebook错误消息(可能是因为我试图在显示“请求权限”窗口之前访问用户的生日:$me‘生日’=null)
有人能告诉我一种从用户那里获得访问用户生日的重新许可的正确方法吗?
注意,这个问题只发生在那些在我的应用程序中已经通过身份验证的用户身上。
发布于 2011-09-07 09:25:04
脸谱将权限的参数从req_perms更改为getLoginUrl()函数中的scope。尝试作用域,也许它能工作。
发布于 2011-09-07 09:25:36
我不明白php...bt检查FB.ui
https://developers.facebook.com/docs/reference/dialogs/oauth/
在这里,您可以使用oAuth对话框来询问用户权限。
发布于 2011-09-07 11:10:21
您可以为请求权限使用范围参数。这是您想要替换的代码
if ($user) {
$logoutUrl = $facebook->getLogoutUrl();
} else {
$loginUrl = $facebook->getLoginUrl(
array(
'scope' => 'email,publish_stream,user_birthday',
)
);如果您使用这些代码,您第一次访问此代码的访问者会请求完全访问,并且已经为其他权限用户提供了一份。你不用用
if($me['birthday'] == null){ ?>
<script>
top.location = 'http://www.facebook.com/dialog/oauth?client_id=MY_APP_ID&redirect_uri=MY_REDIRECT_URL&scope=user_birthday';
</script>
<?php }else{ ?>
//Some other codes
https://stackoverflow.com/questions/7331352
复制相似问题