Dil*_*ral 3 facebook-graph-api oauth-2.0 facebook-oauth facebook-php-sdk facebook-graph-api-v2.0
目前,我正在要求用户提供两个读权限,即email和user_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;
}
...
}
Run Code Online (Sandbox Code Playgroud)
Facebook是我自定义构建的类,用于包装SDK中各种类使用的登录流.IsAuthenticated()使用codeget变量来检查用户是否被授权.verifyScopes()检查授予对属性SCOPES的拒绝范围数组并对其进行分配的权限denied_scopes.getLoginURL()`根据作为数组作为唯一参数传递的权限构建登录对话框URL.
现在,问题是当用户没有授予写权限时,publish_actions在这种情况下,显示写权限对话框,直到用户授予写权限.但是,如果用户选择拒绝读取权限,email则说明不显示读取登录对话框.相反,Facebook重定向到回调URL(即REDIRECT_URI)创建重定向循环.
我正在建立的应用程序需要email强制提供,但显然上述方法(似乎是唯一的)失败了.那么,是否有解决方法或替代方法来实现这一目标?或Facebook一旦被拒绝就不允许要求读取权限?
截至2014年7月15日,已对Facebook PHP SDK 4.x进行了更新,允许用户重新询问拒绝的权限.现在的函数原型看起来像这样.getLoginUrl()
public function getLoginUrl($redirectUrl, $scope = array(), $rerequest = false, $version = null)
Run Code Online (Sandbox Code Playgroud)
所以,要重新询问被拒绝的权限,我们会做这样的事情:
<?php
// ...
$helper = new FacebookRedirectLoginHelper();
if ($PermissionIsDeclined) {
header("Location: " . $helper->getLoginUrl( $redirect_uri, $scopes, true );
exit;
}
// ....
?>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1506 次 |
| 最近记录: |