gpt4 book ai didi

javascript - fb.login 响应始终返回 true

转载 作者:行者123 更新时间:2023-12-02 19:38:30 24 4
gpt4 key购买 nike

为了检查用户是否已授予所有所需的权限,我这样做:

    FB.login(function(response){
console.log(response.status);
if (response.status == 'connected') {
/* user gave permssions */
}else{
/* user didnt, unmark the checkbox */
$('input:checkbox').removeAttr('checked');
}
}, { scope: 'publish_stream' });

问题是这总是返回 true,无论 user: 登录、忽略还是关闭弹出窗口都没有关系。

知道为什么吗?

还尝试过: if (response.authResponse) { 没有成功..

最佳答案

这里的问题是 publish_streamextended permission ,这意味着用户可以选择退出该权限。一般来说,当用户点击回调中的代码块时,他们已经验证了您的应用程序,但不一定具有您请求的所有权限,因为其中一些权限可能是 extended permissionsresponse.status 仅用于传达用户是否已对应用程序进行身份验证的状态,而不是用于传达用户是否已接受您请求的所有对话框提示/权限的状态。就您而言,publish_stream 是扩展权限,因此不能保证您在回调中拥有该用户的权限。如果您在用户已经通过身份验证后请求 publish_stream 作为增量权限,那么您对 ​​response.status 的条件检查将始终返回 true(因为根据定义,用户拥有已经验证了您的应用程序)。

如果您想在回调中验证您是否拥有 publish_stream 权限,请使用图形 API 上的 /me/permissions 端点检查权限。

你想要的是这样的:

FB.login(function(response){
if (response.status == 'connected') {
FB.api('/me/permissions', function(response) {
var permsArray = response.data[0];
// Permissions that are needed for the app
var permsNeeded = ['publish_stream'];
var permsToPrompt = [];
for (var i in permsNeeded) {
if (permsArray[permsNeeded[i]] == null) {
permsToPrompt.push(permsNeeded[i]);
}
}

if (permsToPrompt.length > 0) {
$('input:checkbox').removeAttr('checked');
}
}
} else {
/* user didnt, unmark the checkbox */
$('input:checkbox').removeAttr('checked');
}
}, { scope: 'publish_stream' });

关于javascript - fb.login 响应始终返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10687851/

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