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

2023-12-30

我目前要求用户提供两个读取权限,即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(使用前将#替换为@)

Facebook PHP SDK 4.0 - 一旦被拒绝就无法重新请求读取权限 的相关文章

随机推荐

  • 从 MongoDB 中删除重复项

    你好 我在 mongodb 中有大约 500 万个文档 复制 每个文档有 43 个字段 如何删除重复的文档 我尝试过 db testkdd ensureIndex duration 1 protocol type 1 service 1 f
  • 如何将 3d numpy 数组转换为 2d

    我有一个像这样的 3d 矩阵 np arange 16 reshape 4 2 2 array 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 并想以网格格式堆叠它们 最终得到 array 0 1 4 5 2 3
  • TLS V 1.1 和 TLS V 1.2 iOS 问题

    有几个问题 如果我的服务器已经运行 TLS1 2 我是否还需要将 NSAppTransportSecurity 功能添加到我的 info plist 中 如果是 为什么 不是所有运行 iOS9 或 gt iOS10 11 版本的苹果设备都可
  • 将列表元素的连续重复项打包到 Prolog 中的子列表中

    我无法返回问题 9 的答案P 99 九十九个 Prolog 问题 http www ic unicamp br meidanis courses mc336 2009s2 prolog problemas 将列表元素的连续重复项打包到子列表
  • Tradingview的自动调整比例功能:排除指标的绘图

    我有一个指标 可以自动压缩 Y 轴上的整个价格图表 所以我必须在大多数情况下让它不可见 即使双击 y 尺度 图表自动调整功能 也可以包含所有可见指标 有没有办法阻止一个或所有指标这样做 哦 我刚刚找到了答案 只需右键单击 y 刻度即可调出带
  • 如何在 Linux 上将光标锁定在窗口内部?

    我正在尝试为 Linux 制作一款游戏 其中涉及大量快速动作和鼠标光标的快速移动 如果用户想在窗口模式下玩 我很想将光标锁定在窗口内部 以避免在激烈的战斗中意外更改程序 显然 如果用户更改程序或按退出键 这会自行取消 暂停菜单 在 Wind
  • 随机访问 C++ 和 Python 时 Linux 内存映射文件性能不佳

    在尝试使用内存映射文件创建多 GB 文件 大约 13 GB 时 我遇到了 mmap 的问题 最初的实现是在 Windows 上使用 boost iostreams mapped file sink 在 c 中完成的 一切顺利 然后代码在 L
  • 在非连续版本之间迁移时出现核心数据迁移错误

    问题 我的核心数据模型有 13 个版本 我制作了 13 个映射模型 V1 V2 V2 V3 等 我已经打开了自动迁移 在两个连续版本 例如 V12 V13 之间迁移时 迁移工作完美 在两个非连续版本 例如 V11 V13 之间迁移时 迁移失
  • 插入到已经排序的列表中

    对于 Java 我有一个名为 TestClass 的类 它有一个名为 Name 的成员 它是一个字符串 我还有一个这种类型的 ArrayList 它已经按名称字母顺序排序 我想要做的是找到放置 TestClass 新实例的最佳索引 到目前为
  • PHP 命名空间覆盖 Use 语句

    谁能告诉我是否可以覆盖 use 语句 我的示例是有一个 MVC 设置 其中的核心代码能够使用扩展核心版本的自定义版本覆盖每个控制器 模型 我面临的问题是我的核心控制器有一个 use 语句告诉它使用核心模型 所以如果我扩展模型 我不知道如何告
  • 如何使C程序的堆栈可执行?

    有没有办法通过编译使C程序的堆栈可执行 I did gcc o convert g convert 然后运行 readelf l convert 检查堆栈是否可执行 但输出为 GNU STACK 0x000000 0x00000000 0x
  • pandas groupby 中的行联合

    我有一个看起来像这样的大数据框 并且可以复制粘贴df pd read clipboard sep s s user nm month unique ips shifted ips halves quarters mo pairs 10011
  • 更新 Clojure 中的分层/树结构

    我有一个 Atom 比如 x def x atom name A id 1 children name B id 2 children name C id 3 children name D id 4 children 并且需要更新子图 例
  • 通过分组将对象添加到 NSMutablearray

    我希望我的 NSArray SampleData 从 parse com 数据库接收实际数据 假设如下 self sampleData date 12 5 2014 group text post1 location x y text po
  • Java 添加格式为 dd:HH:mm:ss 的日期

    我有三个日期String格式的对象 dd HH mm ss 00 1 9 14 00 3 10 4 00 3 39 49 如何在 Java 中添加这些日期以获得总和 00 7 59 07 示例代码 SimpleDateFormat sdf
  • Acumatica 和 Outlook 插件以及 Azure 单点登录错误

    与 Acumatica 的 Outlook 插件相关 当我们的用户尝试使用其 azure 登录名进行身份验证时 我们会看到以下错误 https www dropbox com s le7t3ez5ua69qls Screenshot 202
  • 如何使用javascript在浏览器html输出中漂亮地打印常见语言的源代码?

    如何使用javascript在浏览器html输出中漂亮地打印常见语言的源代码 我的意思是有一些缩进和代码格式 目前我只得到了http alexgorbatchev com SyntaxHighlighter http alexgorbatc
  • python copy.deepcopy时出现递归错误

    我在 python 中遇到问题 我有一堂定制课 getattr class ChoiceNumToName object def init self django choice tuple self ods choice tuple dja
  • 从列表中获取第一个非 None 值

    给定一个列表 有没有办法获得第一个非 None 值 如果是这样 那么Python式的方法是什么 例如 我有 a objA addreses country code b objB country code c None d CA 在这种情况
  • Facebook PHP SDK 4.0 - 一旦被拒绝就无法重新请求读取权限

    我目前要求用户提供两个读取权限 即email and user location和一个写权限 即publish actions 以下是我用来验证用户是否已授予所有请求的权限的代码片段 facebook new Facebook APP ID