我遇到了一个棘手的问题。困难意味着我搜索了网络和StackOverflow以及整个FBJS SDK文档并且没有找到答案。
我正在构建一个Page Tab应用程序,我想让粉丝们参加rsvp活动。所以我必须检查用户是否已登录,如果不是,我必须登录。这听起来很简单,但FB.getLoginStatus不会触发回调函数。这是代码摘录:
FB.init({
appId: window.appID,
status: true,
xfbml: true,
cookie: true,
oauth: true,
channelUrl: 'http://example.com/fb/channel.html'
});
然后我只是 - 当然在用户点击一个按钮后 - 调用FB.getLoginStatus,但它似乎没有做任何事情。
我已经检查了沙盒模式,FB.init成功,应用程序设置中的URL和开发环境。我可以调用FB.ui,尽管FB.ui的方法是:'oauth'我收到一条错误消息,说“”redirect_uri“参数不能与”next“参数一起使用,这个参数已被弃用。”这很奇怪,因为我没有使用“next”参数。但是当我在undefined旁边设置时,它工作正常,我得到了窗口,但它说“应用程序配置不允许给定URL。”。期待,我可以登录,然后我有access_token。但是在新窗口中,getLoginStatus仍然没有做任何事情。
所以欢迎任何建议。
谢谢, 的Tamas
更新:
function onBodyLoad() { //on body onload
FB.init({
appId: window.appID,
status: true,
xfbml: true,
cookie: true,
oauth: true,
channelUrl: 'http://example.com/fb/channel.html'
});
}
...
function getName() { // on button onclick
FB.getLoginStatus(function(response){
if (response.authResponse)
{
window.loggedIn = true;
debugString('Logged in');
} else
{
window.loggedIn=false;
debugString('Not logged in');
}
}, true);
if (window.loggedIn === undefined) {
debugString('getLoginStatus did not exec'); // I always get this message
}
}
更新2 :我在不同的网址上创建了一个新应用,该网址配置为独立网站。这些代码完美无缺,我可以获取登录状态,我可以登录等。在FB的上下文中,在独立网站中使用FB JavaScript SDK有什么区别吗?
答案 0 :(得分:21)
FB.getLoginStatus
不会触发回调。当我在本地或登台服务器上进行开发时,我经常发现自己处于这种情况。
例如,如果您使用 example.com 注册了该站点,并且您的登台服务器是 example.mystagingserver.com ,则回调将不会触发。在这种情况下,您需要在Facebook中创建第二个应用程序,并为新应用程序使用应用程序ID和密码。
答案 1 :(得分:3)
我遇到了同样的问题,但只发生在一些用户身上。
我终于发现,如果您的应用是沙箱模式,那么非开发者用户仍然可以将您的应用视为页面标签。但调用getLoginStatus将无声地失败(甚至打开日志记录)。
花一点时间想出那个,我希望这可以节省一些时间。
答案 2 :(得分:2)
我正在成功使用此代码。我不太确定差异在哪里..但我正在使用ASYNC FB Loader。
window.fbAsyncInit = function() {
FB.init({ appId: 'XXXXXX', //change the appId to your appId
status: true,
cookie: true,
xfbml: true,
oauth: true});
function authEvent(response) {
if (response.authResponse) {
//user is already logged in and connected
FB.api('/me', function(info) {
login(response, info);
});
} else {
//user is not connected to your app or logged out
button.onclick = function() {
FB.login(function(response) {
if (response.authResponse) {
FB.api('/me', function(info) {
login(response, info);
});
} else {
//user cancelled login or did not grant authorization
}
}, {scope:'email,rsvp_event,status_update,publish_stream,user_about_me'});
}
}
}
// run once with current status and whenever the status changes
FB.getLoginStatus(updateButton);
FB.Event.subscribe('auth.statusChange', updateButton);
};
(function() {
var e = document.createElement('script'); e.async = true;
e.src = document.location.protocol
+ '//connect.facebook.net/en_US/all.js';
document.getElementById('fb-root').appendChild(e);
}());
function login(response, info){
if (response.authResponse) {
accessToken = response.authResponse.accessToken;
userid = info.id;
userInfo.innerHTML = '<img src="https://graph.facebook.com/' + info.id + '/picture">' + info.name+"<br /> Your Access Token: " + accessToken;
}
}
答案 3 :(得分:0)
您可以使用以下代码检查用户是否已登录:
FB.getLoginStatus(function(response) {
if (response.authResponse) {
// logged in and connected user, someone you know
} else {
// no user session available, someone you dont know
}
});
您可以将整个代码包装在jQuery准备就绪中:
$('document').ready(function(){
... above code
})
您也可以查看this question StackOverflow。
答案 4 :(得分:0)
我有同样的问题。我正在研究我们网站的Facebook登录过程。在开发过程中,“ FB.getLoginStatus”未返回响应。我在Facebook上的应用设置中对其进行了修复:
-在Facebook中转到“管理应用”
-转到您应用的“ facebook登录”设置
-将您的开发网址(例如“ https://localhost”)添加到“有效的OAuth重定向URI”中
(完成开发后,请不要忘记从OAuth重定向URI中删除“ https://localhost”。)
答案 5 :(得分:0)
答案 6 :(得分:-1)
经过大量测试后,对我来说,除非您使用有效的Application ID
这些可以在
中找到https://developers.facebook.com/apps/{{Application__Id}}/settings/
请确保使用正确的ID呼叫api。