gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:58:26 24 4
gpt4 key购买 nike

我目前要求用户提供两项读取权限,即 emailuser_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 不允许在被拒绝后请求读取权限?

最佳答案

截至 2014 年 7 月 15 日an update Facebook PHP SDK 4.x 允许用户重新请求被拒绝的权限。 getLoginUrl() 的函数原型(prototype)现在如下所示。

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

// ....
?>

关于facebook-graph-api - Facebook PHP SDK 4.0 - 一旦被拒绝就无法重新请求读取权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24716168/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com