devise - 带有设计的omniauth google-oauth2-invalid_credentials和 "Csrf detected"

标签 devise ruby-on-rails-3.2 omniauth google-oauth

尊敬的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/

相关文章:

jquery - 修改 Devise 警报(Rails 3)

ruby-on-rails-3.2 - JSON 格式的图像 url(RABL、Dragonfly、Ruby on Rails)

oauth - microsoft_graph oAuth 刷新错误

ruby-on-rails - 嵌套属性未正确显示表单

ruby-on-rails - 如何在Rails中使用json更新nested_attributes?

ruby-on-rails - Twitter API 通过 Rails 3 上的 OmniAuth,Net::HTTPUnauthorized hell

ruby-on-rails - Devise + OmniAuth(仅限 GoogleOAuth)== session_path 无方法错误

ruby-on-rails-3 - 将设备路由从 ID 更改为用户名

ruby-on-rails - Rails 4 - 从/user/:id to/:username 更改 URL

ruby-on-rails - 设计 - 从两个模型登录