Google OAuth回调阶段执行了两次

时间:2015-07-16 03:51:49

标签: ruby-on-rails ruby ruby-on-rails-3 oauth-2.0 google-oauth

我已经在这个问题上坚持了几天,我在这里感到很茫然。我已经通过OAuth 2为我们的网站实施了谷歌登录,它在我的计算机(本地环境)上可以在任何浏览器上完美运行,但是当我部署到我们的登台环境时,它只适用于谷歌浏览器。我们使用设计2.2.8 gem来处理身份验证以及 google-oauth2 0.2.6 以处理与Google登录的互动。我担心的一件事是我们的身份验证过程发生在2个不同的子域上,例如:

  1. 登陆网页(en.mywebsite.com)
  2. 点击使用Gmail登录
  3. 向我们的服务器发出请求
  4. 在谷歌同意屏幕上重定向
  5. 用于身份验证的回调网址(my.website.com)
  6. 一旦用户被认证,他将只在my.website.com上浏览,但最初在被认证之前他在不同的子域。所以我想知道在认证过程中会话级别是否会出现问题?

    以下是我希望通过谷歌浏览器上的登录环境通过Google登录验证自己的日志:

      

    Jul 16 11:36:44(google_oauth2)请求阶段已启动。

         

    Jul 16 11:36:44(google_oauth2)回调阶段已启动。

         

    Jul 16 11:36:45 method = GET path = / users / auth / google_oauth2 / callback   format = html controller = authentification / omniauth action = google_oauth2   status = 302 duration = 49.96 view = 0.00 location = http://my.website.com/   PARAMS = {"状态" = GT;" e6a565c411170cfcbc62d0209970bd39842aae090671a95a&#34 ;,   "代码" = GT;" 4 / Ib0zrAHgAVNWli9RwJsXf9g7edcVlx96xVLmxCB4Eoc&#34 ;,   " controller" =>" authentification / omniauth"," action" =>" google_oauth2"}

         

    Jul 16 11:36:46 method = GET path = / format = html controller = my / dashboard   action = index status = 200 duration = 839.57 view = 160.90   params = {" controller" =>" my / dashboard"," action" =>" index"}

    以下是我想在Safari上的登台环境中通过Google登录验证身份的日志:

      

    Jul 16 11:24:21(google_oauth2)请求阶段已启动。

         

    Jul 16 11:24:22(google_oauth2)回调阶段已启动。

         

    Jul 16 11:24:23 method = GET path = / users / auth / google_oauth2 / callback   format = html controller = authentification / omniauth action = google_oauth2   status = 401 duration = 0.77 view = 0.00   PARAMS = {"状态" = GT;" 05e6567e2443eb5766c77a271d60a767a568b32491ce852c&#34 ;,   "代码" = GT;" 4 / yNlgCDyI71mmYoT48BpWIJNnbaKzUhy7bclIxGHqJdo&#34 ;,   " controller" =>" authentification / omniauth"," action" =>" google_oauth2"}

         

    Jul 16 11:24:23(google_oauth2)回调阶段已启动。

         

    7月16日11:24:23(google_oauth2)身份验证失败!   invalid_credentials:OAuth2 :: Error,invalid_grant:代码已经存在   赎回。

         

    Jul 16 11:24:23 {Jul 16 11:24:23"错误" :" invalid_grant",7月16日   11:24:23" error_description" :"代码已经兑换。" 7月16日   11:24:23}

    由于回调阶段已启动两次,并且来自google oauth的令牌用于uniq用途,因此第二次回调显然会失败。

    我在initialiser文件夹下有一个文件omniauth.rb文件,用于将Omniauth放在中间件堆栈中:

    Rails.application.config.middleware.use OmniAuth::Builder do
      provider :google_oauth2, "google-id", "secret", { scope: "email, profile, gmail.readonly, calendar"}
    end
    

    我知道有些人在定义Omniauth两次时遇到了与我相同的问题,因为他们在omniauth.rb文件和devise.rb中定义了它,所以我确保它只定义了一次。

0 个答案:

没有答案