3

Railscast #360 に示されている指示に基づいて、アプリと Facebook の両方からログアウト ボタンを取得しようとしています。クリックすると、アプリはログアウトしているように見えますが、Facebook セッションは持続します。おそらく5回に1回、ユーザーはFacebookからログアウトしています。これは、FB.logout() 関数が呼び出されたときに Facebook の Cookie が破棄されないことに関係していると思われます。その Cookie を手動で削除すると、ユーザーは Facebook からログアウトされるためです。これは非同期であるため、おそらくタイミングの問題でしょうか? 助言がありますか?関連するコードは次のとおりです。

application.html.erb

    <div id="fb-root"></div>
    <script>

    window.fbAsyncInit = function() {
        FB.init({
            appId      : '(**myappid**)', // App ID
            status     : true, // check login status
            cookie     : true // enable cookies to allow the server to access the session
        });

        $('#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();
                }
            });
            return true;
        });
    };
     </script>

sessions_controller.rb

class SessionsController < ApplicationController

      def create
        user = User.from_omniauth(env["omniauth.auth"])
        session[:user_id] = user.id
        redirect_to root_url
      end

      def destroy
        session[:user_id] = nil
        redirect_to root_url
      end
    end
4

1 に答える 1

2

以下を追加してこれを修正しました。

  def destroy
    session[:user_id] = nil
    sleep 3
    redirect_to root_url
  end

セッションコントローラーに

于 2012-08-06T19:44:20.547 に答える