【问题标题】:Facebook Javascript SDK rerequest permissions doesn't promptFacebook Javascript SDK 重新请求权限不提示
【发布时间】:2015-02-22 20:59:57
【问题描述】:

自从我上次尝试以来一直无法解决这个问题,但我在此之后重组了代码 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(',')
    });
  });
};

对修改或更改的内容有什么建议吗?我完全不知道该怎么做。现在,无论您否认或允许什么,都不会发出警报。

【问题讨论】:

    标签: javascript facebook permissions facebook-javascript-sdk


    【解决方案1】:

    您的代码中似乎存在一些错误。我强烈建议您正确设置代码的格式和样式。

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

    请注意,这是使用 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]; =&gt; 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' 设置为登录请求的默认值,因为如果授予所有权限,我看不到任何权限提示。

    【讨论】:

      【解决方案2】:

      @Jeff Caspian

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

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

      再次感谢这个电话拯救了我。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-23
        • 2012-12-27
        • 2015-07-12
        • 2012-08-09
        • 2015-09-17
        • 1970-01-01
        相关资源
        最近更新 更多