我的应用程序有一个Facebook登录按钮(<fb:login-button>
),它将用户登录到Facebook并验证他们对我的应用程序的使用。这是我的代码(login()
和logout()
准备分别登录和注销的页面布局)。有关此代码背后的原因,请参阅this answer。
window.fbAsyncInit = function() {
FB.init({
appId: myAppID,
channelUrl: window.location.protocol + '//'
+ window.location.host + '/channel.html',
status: false,
cookie: true,
xfbml: false,
oauth: true
});
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
login(response);
} else {
FB.Event.subscribe('auth.login', function(response) {
login(response);
});
logout();
}
});
}
(function(d){
var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
if (d.getElementById(id)) return;
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
ref.parentNode.insertBefore(js, ref);
}(document));
问题:新用户获得Oauth对话框并可以登录Facebook,但auth.login
不会为他们开火。 auth.authResponseChange
和auth.statusChange
(都描述为here)都没有。下次用户按下按钮,或者如果他们已经登录到Facebook,对话框会弹出并立即消失。 (奇怪的是,回调确实发生在我自己的Facebook帐户上,可能是因为我之前已经对该应用进行了身份验证。)
作为一种解决方法,我尝试触发FB.login()
作为登录按钮的手动onclick事件(原谅使用内联Javascript):
<fb:login-button onclick="FB.login(function(r){if(r.authResponse)login(r)})">
但这也不会触发登录回调(虽然它确实记录了用户)。
使用登录按钮登录Facebook的正确方法是什么?
答案 0 :(得分:0)
原来这些登录方式都没问题,我只是忘了在developers.facebook.com的应用程序设置中禁用“沙盒模式”:
“如果启用,只有应用开发者才能使用应用。”
糟糕。