Dou*_*oug 9 devise omniauth ruby-on-rails-3.2 google-oauth
亲爱的优秀人才:
我正在开发Rails 3.2.12上的Ruby应用程序(我还是新手).
我正在努力让Devise与Omniauth合作......我正在尝试的第一个策略是Google_oauth2.
我选择了要在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)
Run Code Online (Sandbox Code Playgroud)
我注意到,如果我只是直接将回调URL放入浏览器,而不提供任何参数,我会得到完全相同的结果.
http://localhost:3000/users/auth/google_oauth2/callback
Run Code Online (Sandbox Code Playgroud)
我该怎么办?我还可以提供哪些其他信息?
Dou*_*oug 11
回答我自己的帖子......我已经过去了.我不完全确定为什么,但我有一些可能值得传递的线索.
报告了与omniauth-facebook策略相关的一系列其他类似问题.他们似乎并不适用于谷歌,所以我看起来并不太深.然后我尝试配置FB策略,并遇到了同样的问题.FB解决方案是将omniauth-facebook gem恢复为1.4.0.
gem 'omniauth-facebook', '1.4.0'
Run Code Online (Sandbox Code Playgroud)
这也会自动恢复omniauth-oauth2宝石(我还没有把我的脑袋包裹在宝石的周围).当我再次尝试谷歌链接时,它没有抛出相同的Csrf检测到的消息...嗯...还原FB宝石固定谷歌----在这里需要免责声明,其他的事情可能是这里的问题,但我我想我说得对.
还有一个值得一提的问题.我上面提供的日志显示了2条重复的日志消息....
(google_oauth2) Callback phase initiated.
(google_oauth2) Callback phase initiated.
Run Code Online (Sandbox Code Playgroud)
这揭示了另一个(可能是相关的)问题.这意味着回调被执行了两次.一旦我解决了CSRF问题,我就开始自己解决了invalid_credentials问题.错误的原因是重复的回调调用.显然,Oauth2只允许一次使用凭证.第二次使用无效.
我使用railscast#235作为我的向导:http://railscasts.com/episodes/235-devise-and-omniauth-revised?autoplay = true
它让我在omniauth.rb初始化程序中添加"提供程序"调用.和config.omniauth在devise.rb初始化程序中调用.我想这些会以某种方式导致重复的回调?!?!?
从omniauth.rb中删除条目让我超越了那个.
所以你有它.我的第二个问题,我的第二个问题,我是唯一的回应者.不确定它是因为它们是愚蠢还是硬...我希望后者.
我有同样的问题。就我而言,我已经在devise.rb和omniauth.rb中都初始化了google-oauth凭据;因此,回调发生了两次。从devise.rb中删除google-oauth凭据后,此CSRF令牌问题得到解决。
| 归档时间: |
|
| 查看次数: |
8973 次 |
| 最近记录: |