9

SOの親愛なる人々:

私はRails 3.2.12でRubyアプリを開発しています(そして私はまだそれに慣れていません)。

Devise を Omniauth で動作させようとしています... 私が試みている最初の戦略は Google_oauth2 です。

Google で使用する資格情報を選択した後、Google が localhost:3000 インスタンスにリダイレクトするところまで機能しています。

このリダイレクトで localhost に戻ると、次のような通知が表示されます。

Could not authenticate you from GoogleOauth2 because "Csrf detected".

サーバーログには次のものが含まれます。

Started GET "/users/auth/google_oauth2" for 127.0.0.1 at 2013-03-21 08:57:01 -0400
(google_oauth2) Callback phase initiated.
(google_oauth2) Callback phase initiated.
(google_oauth2) Authentication failure! invalid_credentials: OmniAuth::Strategie
s::OAuth2::CallbackError, OmniAuth::Strategies::OAuth2::CallbackError


Started GET "/users/auth/google_oauth2/callback?state=7849a3762d07e7f89e69b4aa46
7efc7b7b2c21655193396b&code=4/v-dSBwAvQUUZL87iNV_yk_Z8s_x0.cnqsdbDX4gUYaDn_6y0ZQ
NgQ9hAaewI" for 127.0.0.1 at 2013-03-21 08:57:40 -0400
Processing by OmniauthCallbacksController#failure as HTML
  Parameters: {"state"=>"7849a3762d07e7f89e69b4aa467efc7b7b2c21655193396b", "cod
e"=>"4/v-dSBwAvQUUZL87iNV_yk_Z8s_x0.cnqsdbDX4gUYaDn_6y0ZQNgQ9hAaewI"}
Redirected to http://localhost:3000/users/sign_in
Completed 302 Found in 0ms (ActiveRecord: 0.0ms)

パラメータを指定せずにコールバック URL をブラウザに直接入力すると、まったく同じ結果が得られることに気付きました。

http://localhost:3000/users/auth/google_oauth2/callback

何を試すことができますか?他にどのような情報を提供できますか?

4

3 に答える 3

11

自分の投稿に答える....私はこれを過ぎました。理由は完全にはわかりませんが、伝える価値のある手がかりがいくつかあります。

omn​​iauth-facebook 戦略に関連して、他にも同様の問題が多数報告されています。それらはグーグルには当てはまらないようだったので、あまり詳しく調べませんでした。次に、FB 戦略を構成しようとしましたが、同じ問題が発生しました。FB の解決策は、omniauth-facebook gem を 1.4.0 に戻すことでした。

gem 'omniauth-facebook', '1.4.0'

これにより、omniauth-oauth2 gem も自動的に元に戻りました (まだ gem について頭を悩ませていません)。Googleリンクをもう一度試したところ、同じCsrf検出メッセージがスローされませんでした...うーん... FB gemを元に戻すとGoogleが修正されました----ここで免責事項が必要です。他のことが問題だった可能性がありますが、私は私はそれが正しいと思います。

言及する価値のある別の問題があります。上記で提供したログには、2 つの繰り返しログ メッセージが表示されていました....

(google_oauth2) Callback phase initiated.
(google_oauth2) Callback phase initiated.

これにより、別の (おそらく関連する) 問題が明らかになります。これは、コールバックが 2 回実行されたことを意味します。CSRFの問題を乗り越えると、invalid_credentialsの問題がすべて発生し始めました。エラーの理由は、重複したコールバック呼び出しです。どうやら、Oauth2 は資格情報の単一使用のみを許可します。2 回目の使用は無効です。

Railscast #235 をガイドとして使用しました: http://railscasts.com/episodes/235-devise-and-omniauth-revised?autoplay=true

omn​​iauth.rb 初期化子に「プロバイダー」呼び出しを追加する必要がありました。そして、devise.rb イニシャライザーでの config.omniauth 呼び出し。これらはどういうわけかコールバックが重複していると思いますか?!?!?

omn​​iauth.rb からエントリを削除すると、それを乗り越えることができました。

それで、あなたはそれを持っています。私の 2 番目の SO の質問と、私が唯一の回答者である 2 番目の質問です。彼らが愚かだったのか、それともハードだったのかはわかりません...私は後者を願っています。

于 2013-03-21T21:25:05.337 に答える
5

私も同じ問題を抱えていました。私の場合、devise.rb と omniauth.rb の両方で google-oauth 資格情報を初期化しました。このため、コールバックが 2 回発生していました。devise.rb から google-oauth クレデンシャルを削除した後、この CSRF トークンの問題は解決されました。

于 2014-02-25T23:05:46.197 に答える
4

この問題に出くわしましたが、あなたの修正はうまくいきませんでした。次の gem バージョンを使用しています。

oauth2 (0.8.1)
omniauth (1.1.4)
omniauth-oauth2 (1.1.1)
omniauth-facebook (1.4.1)
omniauth-google-oauth2 (0.2.1)

私の問題を解決たのは、omniauth.rb イニシャライザーを次のように調整することでした。

OmniAuth.config.full_host = "http://localhost:3000"

Rails.application.config.middleware.use OmniAuth::Builder do
    provider :facebook, KEY, SECRET,
    provider :google_oauth2, KEY, SECRET, :scope => "userinfo.email,userinfo.profile"
end

重要な部分は、google_oauth2 の「スコープ」パラメーターを追加することでした。これがないと、認証エラーが発生しました。

このブログのインストールに基づいています: http://sreeharikmarar.blogspot.com.au/2013/01/omniauth-devise-authentication-using.html

関連記事: OmniAuth using google oauth 2 戦略スコープの失敗

于 2013-10-24T09:09:36.480 に答える