Facebook登录按钮在点击时不接受权限

时间:2013-08-28 18:00:35

标签: facebook facebook-javascript-sdk facebook-php-sdk facebook-login

我的应用主页网址顶部有以下内容。

<div id="fb-root"></div>
<script>
    window.fbAsyncInit = function() {
        FB.init({
            appId: '123456789',
            status: true, 
            cookie: true, 
            xfbml: true, 
            oauth: true 
        });

        FB.getLoginStatus(function(response) {
            if(response.status === 'connected') {
                if(response.authResponse != 'undefined'){
                    window.location = '<?php echo $base_url; ?>register';
                }
            } else if(response.status === 'not_authorized')
            {
                //it means we have a user but he hasn't granted any permissions to our app
                //we're going to redirect him to the permission page
                window.location = 'https://www.facebook.com/dialog/oauth?client_id=456109407732505&response_type=code&redirect_uri=<?php echo $base_url; ?>register&scope=email,publish_actions,user_likes';
            } else 
            {
                //the user is not logged in, as you already have a login button you don't have to do nothing  
            }
        });

        FB.Event.subscribe('auth.login', function(response) {
            window.location = '<?php echo $base_url; ?>register';
        });
    };

    (function(d, s, id) {
       var js, fjs = d.getElementsByTagName(s)[0];
       if (d.getElementById(id)) return;
       js = d.createElement(s); js.id = id;
       js.src = '//connect.facebook.net/en_US/all.js';
       fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));
</script>

<div class="fb-login-button" 
    data-show-faces="false" 
    data-scope="email,publish_actions,manage_notifications,user_likes" 
    size="large" 
    data-width="200" 
    data-max-rows="1">
</div>

此代码抛出错误的唯一时间是查看站点的用户登录到FB但未接受应用程序的权限。在这种情况下,用户将被重定向到JS中指定的链接(“https://www.facebook.com/dialog/oauth?client_id=456109407732505&response_type=code&redirect_uri= register&amp; scope = email,publish_actions,user_likes”),他们可以选择接受或拒绝所请求的权限。如果用户选择通过该链接接受权限,那么一切都很顺利。但是,单击FB登录按钮后,将出现一个弹出窗口,该弹出窗口还允许用户接受或拒绝该权限。在弹出窗口上接受所请求的权限后,由于某种原因,未提取用户的电子邮件。用户被重定向到register.php文件并引发错误。但是,当register.php页面刷新时,它可以正常工作。

FB Pop up that doesn't complete registration

在我的register.php文件中。我有

require_once('application/third_party/facebook_api/src/facebook.php');
$facebook = new Facebook(array('appId' => '123456789',
                                'secret' => 'app_secret',
                                'cookie' => true));
$access_token = $facebook->getAccessToken();

if($access_token != '') 
{
    $user = $facebook->getUser();

    if($user != 0)
    {
//      Get the user's info
        $user_profile = $facebook->api('/'.$user);  

//      Get the user's permissions 
        $perms = $facebook->api('/'.$user.'/permissions');  
        $perms = $perms['data'][0];
        $installed = $perms['installed'];

        if($installed == 1)
        {
            $fb_first_name = $user_profile['first_name'];
            $fb_last_name = $user_profile['last_name'];

//              Find out if they accepted the email permission
            $email_perm = $perms['email'];

            if($email_perm == 1)
            {
                $fb_email = $user_profile['email'];
            } else
            {
                $fb_email = '';
            }
       }
  }

PHP给我一个错误,读取“未定义索引'电子邮件'。”它可以刷新页面,但不是第一次。您可以转到my app查看一个有效的示例。

非常感谢

1 个答案:

答案 0 :(得分:0)

你应该“不能”不再混合读写权限 使用登录按钮 你必须得到基本的和阅读,然后在你的网站流程中要求在需要时写作


https://developers.facebook.com/docs/facebook-login/permissions/

  

以下是一些在请求权限时使用的准则   在登录期间和之后:

     

仅询问对应用程序至关重要的权限。

     

在需要它们的上下文中请求许可。对于   例如,如果您的应用想要在一个人附近显示感兴趣的地方   home,在显示之前询问user_location   信息会让人更好地理解为什么   正在申请许可。

     

在要求之前使用任何可用的公开个人资料信息   允许。例如,有一个age_range字段   安装您的应用的任何人的公开个人资料。这个字段可能是   足以满足您的应用,而不是请求user_birthday   权限。

     

分离读取和发布权限的请求。更多   详情见下文。

     

永远不要求您认为可能需要的权限。   人们会怀疑并拒绝您的应用。