28

Railscast #360 で説明されているように omniauth-facebook を実装しようとしていますが、かなりの障害に遭遇しました。サインイン リンクをクリックすると、目的のポップアップが表示され、Facebook の資格情報を入力するよう求められますが、送信すると、OmniAuth::Strategies::OAuth2::CallbackError エラーが発生します。Apache ログでは、これは出力されます: (facebook) Authentication failure! invalid_credentials: OmniAuth::Strategies::OAuth2::CallbackError、OmniAuth::Strategies::OAuth2::CallbackError

関連するコードは次のとおりです。

omn​​iauth.rb

OmniAuth.config.logger = Rails.logger

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook, ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_SECRET']
end

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

application.html.erb

<div id="fb-root"></div>
<script>        
window.fbAsyncInit = function() {
    FB.init({
        appId      : '(**my app id**)', // 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>

簡単なものがありませんか?ここ数日、解決策を探していました。

4

7 に答える 7

68

omn​​iauth-facebook v1.4.1 で CSRF の問題が発生したようです。一時的な修正は、v1.4.0 にロールバックすることです。Gemfile で、omniauth-facebook 行を次のように変更します。

gem 'omniauth-facebook', '1.4.0'

問題を報告しました: https://github.com/mkdynamic/omniauth-facebook/issues/73

于 2012-07-23T21:38:43.200 に答える
6

1人のユーザーで機能していたのに、2人目のユーザーで認証エラーが発生するという同様の問題が発生しました。

サンドボックスモードを無効にすると([アプリ]>[設定]>[詳細])、修正されたようです。

于 2012-07-23T19:16:49.837 に答える
1

omn​​iauth.rbに次のコードを追加します。

OmniAuth.config.on_failure = Proc.new do |env| new_path = "/auth/failure"
 [302, {'Location' => new_path, 'Content-Type'=> 'text/html'}, []]
end
于 2012-07-27T21:12:15.160 に答える
1

omn​​iauth-oauth2 > 1.0.3 でも問題が発生することに気付きました。上位バージョンをアンインストールし、omniauth-oauth2 1.0.3 を保持すると問題が解決します。

于 2013-03-03T20:21:54.760 に答える
0

私もこれを持っています。

JS スクリプトを削除するとapplication.html.erb(ただし、fb-rootdiv は保持されます)、機能します。とにかく、FB ログイン画面はポップアップ ウィンドウに表示されなくなり、FB ログインにリダイレクトされ、代わりにサイトに戻ります。

于 2012-07-23T14:25:57.877 に答える
0

私のように油断している者にとっては、

Remember to switch you app out of Sandbox modeデプロイする前に、developers.facebook で!

サンドボックス モードでは、開発者のアカウントを除くすべてのユーザーに対して csrf エラーがトリガーされます。

于 2012-10-25T03:01:41.053 に答える