Facebook PHP SDK 4.0-拒绝后就无法重新授予读取权限

迪利普·拉吉·巴尔(Dilip Raj Baral)

目前,我正在要求用户提供两个读权限,即emailuser_location和一个写PERMSSION即publish_actions以下是我用来验证用户是否已授予所有请求的权限的代码段:

    $facebook = new Facebook(APP_ID, APP_SECRET, REDIRECT_URI);

    if ( $facebook->IsAuthenticated() ) {

        // Verify if all of the scopes have been granted
        if ( !$facebook->verifyScopes( unserialize(SCOPES) ) ) {
            header( "Location: " . $facebook->getLoginURL( $facebook->denied_scopes) );
            exit;
        }
        ...
    }

Facebook是我自定义构建的类,用于包装SDK中各种类使用的登录流程。IsAuthenticated()利用codeget变量来检查用户是否被授权。verifyScopes()检查授予的权限,SCOPES并将拒绝范围的数组赋给denied_scopes属性。getLoginURL()`根据作为数组传递的权限(仅作为参数)构建登录对话框URL。

现在,问题是当用户不授予写权限时,publish_actions在这种情况下,将显示写权限对话框,直到用户授予写权限为止。但是,如果用户选择拒绝读取权限,例如email,则不会显示读取登录对话框。相反,Facebook重定向到回调URL(即REDIRECT_URI),从而创建重定向循环。

email必须强制提供我正在构建的应用程序,但显然上述方法(似乎是唯一方法)失败了。那么,是否有解决方法或替代方法来实现这一目标?还是Facebook一旦拒绝就不允许请求读取权限?

迪利普·拉吉·巴尔(Dilip Raj Baral)

2014年7月15日起Facebook PHP SDK 4.x进行了更新,允许用户重新请求被拒绝的权限。现在的功能原型看起来像这样。getLoginUrl()

public function getLoginUrl($redirectUrl, $scope = array(), $rerequest = false, $version = null)

因此,要重新询问被拒绝的权限,我们将执行以下操作:

<?php
// ...

$helper = new FacebookRedirectLoginHelper();

if ($PermissionIsDeclined) {
    header("Location: " . $helper->getLoginUrl( $redirect_uri, $scopes, true );
    exit;
}

// ....
?>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档