使用omniauth-google-oauth2 redirect_uri_mismatch进行身份验证

时间:2014-03-21 15:37:05

标签: ruby-on-rails authentication callback uri omniauth

我很抱歉发布这样一个蹩脚的问题,但我设法使用omniauth与facebook,twitter甚至linkedin,但我仍然无法用谷歌omniauth 2.0,我发现这个问题与回调URI(我必须补充说我正在测试本地环境[localhost]),所以我试图通过以下方式更改URI

http:127.0.0.1:3000 / auth / google_oauth2 / callback /
http:127.0.0.1:3000 / auth / google_oauth2 / callback
https:127.0.0.1:3000 / auth / google_oauth2 /回拨/
https:127.0.0.1:3000 / auth / google_oauth2 / callback
http:localhost:3000 / auth / google_oauth2 / callback /
http:localhost:3000 / auth / google_oauth2 / callback *
https:localhost:3000 / auth / google_oauth2 / callback /
https:localhost:3000 / auth / google_oauth2 / callback

到目前为止,我已经单独尝试了每一个,但没有一个工作,看起来标有*的那个是我的浏览器返回的那个,但仍然接收

The redirect URI in the request:
 http://localhost:3000/auth/google_oauth2/callback did not match a 
 registered redirect URI

我在那里寻找关于如何执行此身份验证的答案,或者如何为localhost回调正确设置回调URI。提前谢谢。

顺便说一句:我使用的是Rails 4和omniauth,omniauth-google-oauth2 gems BTW2:我删除了“//”所以这些不会被视为链接

  • 其他相关问题是,如何在重定向列表中添加多个URI?我试图用“,”或者只是一个空格来添加它们,因为没有一个工作,然后我真的不知道什么是道具方式。

2 个答案:

答案 0 :(得分:1)

确保您在线访问类型

config.omniauth :google_oauth2, "[my key]", "[secret]", {access_type: 'online'}

答案 1 :(得分:0)

此代码适用于我。在多个环境中使用Google Drive API。 你的“AUTHORIZED REDIRECT URIS”应如下所示(我正在使用google,你的可能是google_oauth2。更改了omniauth配置文件的提供程序选项)。 新行上的每个URI。

http://localhost:3000/auth/google/callback
https://staging_server/auth/google/callback
https://production_server/auth/google/callback

我的client_id,client_secret位于'config / google_client.yml'。 'config / initializers'中的'omniauth.rb'文件应如下所示

google_client =  YAML.load_file("#{Rails.root.join('config/google_client.yml')}")
ENV['GOOGLE_APP_NAME'] = google_client['APP_NAME']
ENV['GOOGLE_CLIENT_ID'] = google_client['CLIENT_ID']
ENV['GOOGLE_CLIENT_SECRET'] = google_client['CLIENT_SECRET']
ENV['GOOGLE_CLIENT_SCOPE'] = google_client['CLIENT_SCOPE']

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :google_oauth2, ENV["GOOGLE_CLIENT_ID"], ENV["GOOGLE_CLIENT_SECRET"],
    { name: "google",
      scope: ENV['GOOGLE_CLIENT_SCOPE'],
      prompt: "consent"
    }    
end

OmniAuth.config.on_failure = SomeController.action(:oauth_failure)

希望这会对你有所帮助。

相关问题