自从我上次去以后一直无法解决这个问题,但我在此之后重新构建了代码 https://developers.facebook.com/blog/post/576/
我无法触发重新请求接受所有权限(忽略警报文本内容,因为这会更改为告诉用户有关需要权限的原因)
这是登录代码
jQuery(function() {
$('body').prepend('<div id="fb-root"></div>');
return $.ajax({
url: "" + window.location.protocol + "//connect.facebook.net/en_US/all.js",
dataType: 'script',
cache: true
});
});
window.fbAsyncInit = function() {
return FB.init({
appId: '<%= ENV["FACEBOOK_KEY"] %>',
cookie: true
});
};
var permsNeeded = ["email", "user_birthday", "user_friends"];
var checkPermissions = function() {
var promptForPerms;
FB.api("/me/permissions", function(response) {
var i, permsArray, permsToPrompt;
permsArray = response.data[0];
permsToPrompt = [];
for (i in permsNeeded) {
if (permsArray[permsNeeded[i]] == null) {
permsToPrompt.push(permsNeeded[i]);
}
}
if (permsToPrompt.length > 0) {
alert("Need to re-prompt user for permissions: " + permsToPrompt.join(","));
promptForPerms(permsToPrompt);
} else {
alert("No need to prompt for any permissions");
}
});
promptForPerms = function(perms) {};
FB.login((function(response) {
console.log(response);
}), {
scope: perms.join(","),
auth_type: "rerequest"
});
$("#sign_in").click(function(e) {
e.preventDefault();
return FB.login((function(response) {
if (response.authResponse) {
checkPermissions();
}
}), {
scope: permsNeeded.join(',')
});
});
};
有关修改或更改内容的任何建议?我完全不知道该做什么。现在,无论您拒绝或允许什么,都不会发出任何警报。
答案 0 :(得分:3)
似乎代码中存在一些错误。我强烈建议您正确格式化代码并设置样式。
我修复了错误,您可以参考下面的修订代码。
请注意,这是使用facebook jssdk v2.2。
window.fbAsyncInit = function() {
FB.init({
appId : '960839450617376',
xfbml : true,
version : 'v2.2'
});
init();
};
(function(d, s, id){
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
function init() {
var permsNeeded = ["email", "user_birthday", "user_friends"];
var checkPermissions = function() {
var promptForPerms;
FB.api("/me/permissions", function(response) {
var permsArray, permsToPrompt;
permsArray = response.data;
permsToPrompt = [];
console.log(JSON.stringify(permsArray));
for (var i = 0, ilen = permsArray.length; i < ilen; i++) {
console.log(permsArray[i].permission, permsArray[i].status);
if (permsNeeded.indexOf(permsArray[i].permission) != -1 && permsArray[i].status != 'granted') {
permsToPrompt.push(permsArray[i].permission);
}
}
console.log(permsToPrompt);
if (permsToPrompt.length > 0) {
alert("Need to re-prompt user for permissions: " + permsToPrompt.join(", ") + '.\nPlease try again and allow the permission mentioned.');
} else {
alert("No need to prompt for any permissions");
}
});
};
$("#sign_in").click(function(e) {
console.log('sign in');
e.preventDefault();
return FB.login(
function(response) {
if (response.authResponse) {
checkPermissions();
}
}, {
scope: permsNeeded.join(','),
return_scopes: true,
auth_type: 'rerequest'
}
);
});
}
如您所见,我已更改permsArray = response.data[0]; => permsArray = response.data;
这是因为当我请求权限列表时,我会收到以下json示例
{
data: [
{
"permission":"public_profile",
"status":"granted"
},
{
"permission":"email",
"status":"granted"
},
{
"permission":"user_birthday",
"status":"granted"
},
{
"permission":"user_friends",
"status":"granted"
}
]
}
我还编辑了循环以检查哪个权限被拒绝。
我们要求用户再次点击登录按钮,而不是通过代码重新登录登录,以便允许登录弹出窗口(通过点击事件)。
我还将auth_type: 'rerequest'
设置为登录请求的默认值,因为如果授予所有权限,我没有看到任何提示权限。
答案 1 :(得分:0)
@Jeff Caspian
这是获取用户电子邮件地址的正确方法,非常感谢我几乎被打了2天。 实际上很多人都向Facebook团队报告他们实际上也无法获得电子邮件地址的错误。
FB.api("/me/permissions", function(response) {
}
这是再次感谢我的电话。