Facebook Javascript SDK重新请求权限不';不提示

Facebook Javascript SDK重新请求权限不';不提示,javascript,facebook,permissions,facebook-javascript-sdk,Javascript,Facebook,Permissions,Facebook Javascript Sdk,自从上一次尝试以来,我一直无法解决这个问题,但在此之后我重新构建了代码 我无法触发接受所有权限的重新请求(忽略警报文本内容,因为这将更改为告诉用户为什么需要权限) 这是登录代码 jQuery(function() { $('body').prepend('<div id="fb-root"></div>'); return $.ajax({ url: "" + window.location.protocol + "//connect.facebook.

自从上一次尝试以来,我一直无法解决这个问题,但在此之后我重新构建了代码

我无法触发接受所有权限的重新请求(忽略警报文本内容,因为这将更改为告诉用户为什么需要权限)

这是登录代码

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(',')
    });
  });
};
jQuery(函数(){
$('body')。前缀(“”);
返回$.ajax({
url:“+window.location.protocol+”//connect.facebook.net/en_US/all.js”,
数据类型:“脚本”,
缓存:真
});
});
window.fbAsyninit=函数(){
返回FB.init({
appId:“”,
曲奇:是的
});
};
var permsNeeded=[“电子邮件”、“用户生日”、“用户朋友”];
var checkPermissions=函数(){
var-promptForPerms;
FB.api(“/me/permissions”),函数(响应){
变量i,permsArray,permstormpt;
permsArray=response.data[0];
permsToPrompt=[];
对于(我在Permsneed){
if(permsArray[permsNeeded[i]]==null){
permsToPrompt.push(permsneed[i]);
}
}
如果(permsToPrompt.length>0){
警报(“需要重新提示用户权限:“+permsToPrompt.join”(,”);
promptForPerms(permsToPrompt);
}否则{
警报(“无需提示任何权限”);
}
});
promptForPerms=函数(perms){};
FB.登录((功能(响应){
控制台日志(响应);
}), {
范围:perms.join(“,”),
验证类型:“重新请求”
});
$(“#登录”)。单击(功能(e){
e、 预防默认值();
返回FB.login((函数(响应){
if(response.authResponse){
检查权限();
}
}), {
作用域:permsNeeded.join(“,”)
});
});
};

对修改或更改的内容有何建议?我完全不知道该怎么办。现在,无论你否认或允许什么,都不会有任何警告

您的代码中似乎有一些bug。我强烈建议您正确设置代码的格式和样式

我已经修复了错误,您可以参考下面修改的代码

请注意,这是使用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'
      }
    );
  });
}
我还编辑了循环以检查哪些权限被拒绝

我们要求用户再次单击“登录”按钮,以允许登录弹出窗口(通过单击事件),而不是通过代码重新登录

我还将auth_type:'rerequest'设置为登录请求的默认值,因为如果授予了所有权限,我看不到任何权限提示。

@Jeff Caspian

这是获取用户电子邮件地址的正确方法,非常感谢,我几乎被击中了两天。 事实上,他们中的很多人都在向Facebook团队报告他们无法获得电子邮件地址,事实上我也是

FB.api("/me/permissions", function(response) {

}
这通电话救了我一命,再次感谢你

FB.api("/me/permissions", function(response) {

}