私のアプリには 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にログインする正しい方法は何ですか?