我目前要求用户提供两个读取权限,即email
and user_location
和一个写权限,即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()
利用code
获取变量来检查用户是否被授权。verifyScopes()
检查授予的权限SCOPES
并将拒绝范围的数组分配给denied_scopes
财产。 getLoginURL()` 根据作为唯一参数作为数组传递的权限构建登录对话框 URL。
现在的问题是当用户不授予写权限时,publish_actions
在这种情况下,将显示写入权限对话框,直到用户授予写入权限。但如果用户选择拒绝读取权限,例如email
,不显示读取登录对话框。相反,Facebook 会重定向到回调 URL(即REDIRECT_URI
)创建重定向循环。
建筑中的应用需要email
强制提供,但显然上述方法(似乎是唯一的)失败了。那么,是否有解决方法或替代方法来实现这一目标?或者 Facebook 不允许在拒绝后请求读取权限?
As of 2014 年 7 月 15 日, 更新 https://github.com/facebook/facebook-php-sdk-v4/commit/a0508f4fb01aa8d72c35ededd5d536f3ce12233c已作出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;
}
// ....
?>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)