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

Wis*_*ell 6 authentication uri ruby-on-rails callback 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/callback/
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 /打回来

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

The redirect URI in the request:
 http://localhost:3000/auth/google_oauth2/callback did not match a 
 registered redirect URI
Run Code Online (Sandbox Code Playgroud)

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

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

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

小智 0

这段代码对我有用。在多个环境中使用 Google Drive API。您的“授权重定向URI”应如下所示(我使用的是google,您的可能是google_oauth2。更改了omniauth配置文件的提供程序选项)。每个 URI 都换行。

http://localhost:3000/auth/google/callback
https://staging_server/auth/google/callback
https://production_server/auth/google/callback
Run Code Online (Sandbox Code Playgroud)

我的 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)
Run Code Online (Sandbox Code Playgroud)

希望这对您有帮助。