Facebook graph api Facebook PHP SDK 4.0-一旦被拒绝,将无法重新请求读取权限

Facebook graph api Facebook PHP SDK 4.0-一旦被拒绝,将无法重新请求读取权限,facebook-graph-api,oauth-2.0,facebook-php-sdk,facebook-oauth,facebook-graph-api-v2.0,Facebook Graph Api,Oauth 2.0,Facebook Php Sdk,Facebook Oauth,Facebook Graph Api V2.0,我目前正在向用户请求两个读取权限,即电子邮件和用户位置,以及一个写入权限,即发布操作。以下是我用来验证用户是否已授予所有请求的权限的代码段: $facebook = new Facebook(APP_ID, APP_SECRET, REDIRECT_URI); if ( $facebook->IsAuthenticated() ) { // Verify if all of the scopes have been granted if

我目前正在向用户请求两个读取权限,即
电子邮件
用户位置
,以及一个写入权限,即
发布操作
。以下是我用来验证用户是否已授予所有请求的权限的代码段:

    $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()
使用
code
get变量检查用户是否获得授权
verifyScopes()
根据
SCOPES
检查授予的权限,并将被拒绝的作用域数组分配给
denied\u SCOPES
属性。getLoginURL()`根据作为数组作为唯一参数传递的权限构建登录对话框URL

现在,问题是当用户不授予写入权限时,
publish\u actions
在这种情况下,将显示写入权限对话框,直到用户授予写入权限。但是如果用户选择拒绝读取权限,例如
电子邮件
,则不会显示读取登录对话框。相反,Facebook重定向到回调URL(即
REDIRECT\u URI
),创建重定向循环

我正在构建的应用程序要求强制提供
电子邮件
,但显然上述方法(似乎是唯一的)失败了。那么,有没有解决办法或替代方法来实现这一点?或者Facebook不允许在被拒绝后请求读取权限?

自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;
}

// ....
?>

目前,您可以将&auth_type=rerequest附加到getLoginUrl返回值,以启用rerequest,虽然有点蹩脚,但它可以工作

$helper = new FacebookRedirectLoginHelper($app_url, $app_id, $app_secret);
$login  = $helper->getLoginUrl(array('scope'=>'user_likes', 'user_location'));
print $login."&auth_type=rerequest";

那么
getReRequestUrl()呢?
那很好用。

更多信息请访问

@CBroe,但写入权限似乎不需要添加
auth_type
:/看起来到今天为止,此更新仍然只在dev分支上,而不是在master(?)上。一开始我有点困惑,为什么我不能添加rerequest“true”参数。想要使用此解决方案的人必须确保他们获得了facebook php的开发分支sdk@Eddie是 啊原来是在开发分支中对4.1进行了更改。参数的顺序在4.0.x中是一个突破性的变化。SDK正在进行重构。所以,让我们希望很快能得到更光滑的SDK版本。