尊敬的SO亲爱的人们:
我正在Rails 3.2.12上开发Ruby应用程序(并且我仍然是新手)。
我正在尝试让Devise与Omniauth合作...我正在尝试的第一个策略是Google_oauth2。
我选择了要在Google中使用的凭据后,工作到了Google已重定向回到我的localhost:3000实例的地步。
重定向回本地主机后,我看到了一个闪动通知: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
我可以尝试什么?我还能提供什么其他信息?
最佳答案
回答我自己的帖子...。我已经过去了。我不完全确定为什么,但是我有一些线索可能值得传递。
报告了许多其他与omniauth-facebook策略相关的类似问题。他们似乎不适用于Google,所以我看起来并不深。然后,我尝试配置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.
这揭示了另一个(可能是相关的)问题。这意味着该回调执行了两次。一旦解决了CSRF问题,我就开始独自解决了invalid_credentials问题。错误的原因是重复的回调调用。显然,Oauth2仅允许一次使用该凭证。第二次使用无效。
我使用Railscast#235作为指导:
http://railscasts.com/episodes/235-devise-and-omniauth-revised?autoplay=true
它让我在omniauth.rb初始化程序中添加了“provider”调用。和config.omniauth在devise.rb初始化程序中调用。我猜这些以某种方式导致重复的回调?!?!?
从omniauth.rb中删除条目使我超越了那个范围。
所以你有它。我的第二个SO问题,以及第二个问题,我是唯一的答复者。不知道是因为他们愚蠢还是辛苦...我希望后者。
关于devise - 带有设计的omniauth google-oauth2-invalid_credentials和 "Csrf detected",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15549204/