Railscast に従って、「Facebook でサインイン」機能をサイトに追加しました。ログインに問題はありません。しかし、ログアウトしようとすると、Facebook 開発者アプリの設定でサンドボックス モードを無効にしても FB.getLoginStatus が発生しなかったようです (他のディスカッションで提案されているように)。
(function() {
jQuery(function() {
$('body').prepend('<div id="fb-root"></div>');
return $.ajax({
url: "" + window.location.protocol + "//connect.facebook.net/en_US/all.js",
dataType: 'script',
cache: true
});
});
window.fbAsyncInit = function() {
FB.init({
appId: 'xxxxxomittedxxxxx',
cookie: true,
status: true,
xfbml: true,
oauth: true
});
$('#sign_in').click(function(e) {
e.preventDefault();
return FB.login(function(response) {
if (response.authResponse) {
return window.location = '/auth/facebook/callback';
}
});
});
return $('#sign_out').click(function(e) {
FB.getLoginStatus(function(response) {
if (response.authResponse) {
return FB.logout(response.authResponse);
}
});
return true;
});
};
}).call(this);
FB.getLoginStatus が入らない (または機能しない) ことを私が知っている理由は、本文を次のように置き換えることです。
FB.getLoginStatus(function(response) {
return alert("I am here!");
});
「sign_out」をクリックしている間、アラートが表示されません。
Chrome と Firefox の両方を同じ動作で実行しています。私が欠けているものを見つけるのを手伝ってくれる人はいますか? どうもありがとう。
私が遭遇した「行動」について、より具体的に説明しましょう。
- mysite.com から Facebook で初めてサインインすると、Facebook のログイン ウィンドウがポップアップして電子メールとパスワードを要求されますが、サイトに完全にサインインでき、期待どおりに動作します
- 次に、mysite.com/users/1 から sign_out ボタンをクリックすると、正常にサインアウトできるように見えます。
- 次に、mysite.com から Facebook で再度サインインすると、Facebook ログイン ウィンドウがポップアップ表示されなくなり、電子メールとパスワードを要求せずに直接 mysite.com/users/1 にログインするようになりました。
- 別のブラウザー ウィンドウを開いて facebook.com にアクセスし、そこからログアウトすると、mysite.com から Facebook でサインインすると、Facebook のログイン ウィンドウがポップアップし、メール アドレスとパスワードを要求されます。
「mysite.com/users/n からログアウトし、mysite.com から Facebook で再度サインインすると、Facebook のログイン ウィンドウがポップアップします」
誰でも役に立ちますか?どうもありがとう。
編集:
さらに調査した結果、「根本的な」原因はまだある可能性があることがわかりました。サインアウトはサインイン ルートの別のルート (またはページ) の下にあり、FB.getLoginStatus は mysite.com/signout の下で発生することはできません。firebug からのエラー メッセージは、「指定された URL はアプリケーションの構成で許可されていません。指定された URL の 1 つ以上がアプリの設定で許可されていません。Web サイトの URL またはキャンバスの URL と一致する必要があります。または、ドメインがアプリのドメインの 1 つのサブドメイン。」
それがルートの問題であることを証明するために、「FacebookログインのあるWebサイト」で指定されているルートルートmysite.comであるサインインルートと同じルート(ページ)にサインアウトリンクを配置しました。すべてが機能し、次のようにログアウトできます期待される:
<%= link_to "sign out facebook", "#" , id: "sign_out" %>
ちなみに、sign_out js は FB.logout(response.authResponse) uncaught [object Object] エラーを取り除くように修正されています。これは、FB.logout がパラメーターとして関数を想定しているためです。
return $('#sign_out').click(function(e) {
FB.getLoginStatus(function(response) {
if (response.authResponse) {
FB.logout();
}
}, true);
});
};
要するに、FB.getLoginStatus には、サインイン ルートとは異なるルートからの呼び出しを処理できないバグがまだ残っている可能性があります。(私は Chrome、Firefox、および Safari でテストしましたが、すべて同じように動作しますが、IE10 には当てはまりません。どういうわけか、IE10 は別のルートでサインアウトしても動作します。)
同様の問題を抱えている人々からのコメントはありますか?お知らせ下さい。事前にどうもありがとうございました。