Facebook (FB.login) 没有请求我的权限

Posted

技术标签:

【中文标题】Facebook (FB.login) 没有请求我的权限【英文标题】:Facebook (FB.login) not requesting my permissions 【发布时间】:2011-10-22 18:52:58 【问题描述】:

所以在更新到 php 3.0 sdk 之后,我的 FB.login() 函数不再要求我设置它要求的权限。还有人得到这个吗?这是给你的一些代码:

window.fbAsyncInit = function() 
  FB.init(
    appId: 'xxx',
    status: true,
    cookie: true,
    xfbml: true,
    oauth : true // enables OAuth 2.0
  );
  // whenever the user logs in, we refresh the page
  //FB.Event.subscribe('auth.login', function() 
  //  window.location.reload();
  //);      
;


FB.login(function(response) 
  if (response.authResponse) 
    console.log('Welcome!  Fetching your information.... ');
    FB.api('/me', function(response) 
      console.log('Good to see you, ' + response.name + '.');
      FB.logout(function(response) 
        console.log('Logged out.');
      );
    );
   else 
    console.log('User cancelled login or did not fully authorize.');
  
, scope:'read_stream,publish_stream,offline_access');

我尝试访问它的方式是通过onClick="FB.login();"。有人可以帮忙吗?

【问题讨论】:

你解决了这个问题吗? 【参考方案1】:

检查 JS SDK 的来源,我发现他们仍然使用 perms 而不是 scope ,因为它记录在案。 这对我有用:

...onclick="FB.login(handleLoginResponse, perms:'email,manage_pages,user_birthday');return false;"...

希望对你有帮助。

【讨论】:

请注意,此信息已过时。试试这个,你会得到“未捕获的错误:OAuth2 规范指出 'perms' 现在应该被称为 'scope'。请更新。”【参考方案2】:

我在 JS SDK 中看到了一些与此相关的内容。设置oauth=true时,函数

FB.login(function (response) 
    if (response.authResponse) 
        console.log('Welcome!  Fetching your information.... ');
     else 
    console.log('User cancelled login or did not fully authorize.');

,  scope: 'email,publish_stream,user_birthday,user_location' );

正确请求扩展权限,但使用<fb:login-button> FBXMLscope="email,publish_stream,user_birthday,user_location" 没有。

在我看来,这像是 Facebook 的错误...

【讨论】:

【参考方案3】:

我的问题和你类似。 我检查了我所有的 javascript 以验证我的范围在 FB.login 定义中是否良好。 最后我意识到我的 html 中有一个 Facebook 按钮。

<form class="form-signin"><fb:login-button size="large">Facebook</fb:login-button></form>

当我还在 FB 按钮中定义了范围时,如果我更改范围,Facebook 会要求我正确接受新权限

<form class="form-signin"><fb:login-button size="large" scope="<?php print($sFacebookScope);?>">Facebook</fb:login-button></form>

【讨论】:

这是唯一可行的解​​决方案! XFBML 按钮需要范围属性!文档中没有提到这个,代码示例不完整。肯定是文档错误!【参考方案4】:

我认为这是因为您在 FB.login 块内调用 FB.logout

实际上,一旦他们登录,他们就会被注销。

所以像这样分开:

// CALLED WHEN USER LOGS IN
function userLogin() 
    FB.login(function(response) 
        if (response.authResponse) 
            console.log('Welcome!  Fetching your information.... ');
            FB.api('/me', function(response) 
                console.log('Good to see you, ' + response.name + '.');
            );
         else 
            console.log('User cancelled login or did not fully authorize.');
        
    , scope:'read_stream,publish_stream,offline_access');


// CALLED WHEN USER LOGS OUT
function userLogout() 
    FB.logout(function(response) 
        console.log('Logged out.');
    );

【讨论】:

【参考方案5】:

在我意识到这是浏览器/facebook 缓存问题之前,我遇到了完全相同的问题。确保您的网络空间中有最新的代码,并在新的浏览器中测试您的应用程序,如果可能是您的问题的解决方案。

【讨论】:

【参考方案6】:

唯一对我有用的解决方案是将权限放在登录按钮标签中,如下所示:

fb:login-button show-faces="true" max-rows="1" data-scope="email">

【讨论】:

以上是关于Facebook (FB.login) 没有请求我的权限的主要内容,如果未能解决你的问题,请参考以下文章

Facebook FB.login 不会要求用户提供电子邮件权限?

为啥 Facebook 登录没有要求正确的权限?

iOS WebApp 的 FB.login 中断流程

Facebook JavaScript SDK:FB.getLoginStatus和FB.Login在Chrome上不起作用

如何在点击FB like按钮时向Facebook用户发送电子邮件?

Fb.Logout 功能不会注销用户