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>
FBXML
和scope="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 JavaScript SDK:FB.getLoginStatus和FB.Login在Chrome上不起作用