首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Facebook gat -用户访问其他数据的重新权限

Facebook gat -用户访问其他数据的重新权限
EN

Stack Overflow用户
提问于 2011-09-07 09:10:08
回答 3查看 1.4K关注 0票数 0

我有一个名为fbmain.php的文件,它将对用户进行身份验证。

代码语言:javascript
复制
<?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‘权限引用如下

代码语言:javascript
复制
//Get permission from user    
$loginUrl = $facebook->getLoginUrl(
                array(
                'canvas'    => 1,
                'fbconnect' => 0,
                'req_perms' => 'email,publish_stream,status_update,user_birthday'
                )
        );

index.php文件的代码如下所示

代码语言:javascript
复制
<?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)

有人能告诉我一种从用户那里获得访问用户生日的重新许可的正确方法吗?

注意,这个问题只发生在那些在我的应用程序中已经通过身份验证的用户身上。

EN

回答 3

Stack Overflow用户

发布于 2011-09-07 09:25:04

脸谱将权限的参数从req_perms更改为getLoginUrl()函数中的scope。尝试作用域,也许它能工作。

https://github.com/facebook/php-sdk/issues/381

票数 0
EN

Stack Overflow用户

发布于 2011-09-07 09:25:36

我不明白php...bt检查FB.ui

https://developers.facebook.com/docs/reference/dialogs/oauth/

在这里,您可以使用oAuth对话框来询问用户权限。

票数 0
EN

Stack Overflow用户

发布于 2011-09-07 11:10:21

您可以为请求权限使用范围参数。这是您想要替换的代码

代码语言:javascript
复制
if ($user) {


 $logoutUrl = $facebook->getLogoutUrl();
} else {


$loginUrl = $facebook->getLoginUrl(
array(
            'scope'         => 'email,publish_stream,user_birthday',

        )


);

如果您使用这些代码,您第一次访问此代码的访问者会请求完全访问,并且已经为其他权限用户提供了一份。你不用用

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7331352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档