我的应用程序有一个 Facebook 登录按钮 ( <fb:login-button>
),该按钮将用户登录到 Facebook 并验证他们对我的应用程序的使用。这是我的代码(login()
并logout()
分别为登录和注销准备页面布局)。有关此代码背后的原因,请参阅此答案。
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
(都在这里描述)。下次用户按下按钮时,或者如果他们已经登录 Facebook,对话框会弹出并立即消失。(奇怪的是,在我自己的 Facebook 帐户中,回调确实会按预期发生,可能是因为我之前已经对应用程序进行了身份验证。)
作为一种解决方法,我尝试FB.login()
将登录按钮作为手动 onclick 事件触发(请原谅使用内联 Javascript):
<fb:login-button onclick="FB.login(function(r){if(r.authResponse)login(r)})">
但这也不会触发登录回调(尽管它确实会登录用户)。
使用登录按钮登录 Facebook 的正确方法是什么?