Google身份验证错误:invalid_request缺少必需的参数:client_id

Bil*_*gan 5 authentication ruby-on-rails oauth-2.0 ruby-on-rails-3 ruby-on-rails-4

我正在尝试在项目中使用omn​​iauth-google-oauth2 gem 进行google身份验证,并且在链接localhost:3000 / auth / google_oauth2 /时遇到了以下错误。

在此处输入图片说明

这是为什么?

config / initializers / omniauth.rb

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :google_oauth2, ENV["GOOGLE_CLIENT_ID"], ENV["GOOGLE_CLIENT_SECRET"]
end
Run Code Online (Sandbox Code Playgroud)

config / routes.rb

Rails.application.routes.draw do
  get '/auth/:provider/callback', to: 'sessions#create'

  root to: 'welcome#index'
end
Run Code Online (Sandbox Code Playgroud)

config / secrets.yml

development:
  secret_key_base: here_goes_my_secret_key_base
  google_client_id: 283155193283-8hnfdph0n4089iql70dh8g7428d258qc.apps.googleusercontent.com
  google_client_secret: xHnbKtackWe4D_1mrWTbRS9f

test:
  secret_key_base: here_goes_my_secret_key_base

production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
  google_client_id: <%= ENV["GOOGLE_CLIENT_ID"] %>
  google_client_secret: <%= ENV["GOOGLE_CLIENT_SECRET"] %>
Run Code Online (Sandbox Code Playgroud)

Jac*_*tad 9

看起来你的 ENV 变量没有GOOGLE_CLIENT_ID设置,请尝试这个。

配置/初始化程序/omniauth.rb

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :google_oauth2, Rails.application.secrets.google_client_id, Rails.application.secrets.google_client_secret
end
Run Code Online (Sandbox Code Playgroud)

您的示例不起作用的原因是您没有设置ENV["GOOGLE_CLIENT_ID"]任何值。要设置 ENV 变量(在 Linux 中),您可以在控制台上执行以下任一操作

export GOOGLE_CLIENT_ID=my_client_id
Run Code Online (Sandbox Code Playgroud)

然而,这只会在该会话中设置变量,要使其永久,您必须编辑 ~/.bash_profile

$ vi ~/.bash_proflle
Run Code Online (Sandbox Code Playgroud)

并将上面的行添加到该文件中。

如何访问 中的变量secrets.yml

当您向文件添加信息时,config/secrets.yml可以使用以下方式访问它们

Rails.application.secrets.my_key_name
Run Code Online (Sandbox Code Playgroud)

我想将 ENV 变量存储在 YML 文件中

为此,您可以使用费加罗宝石

将 gem 添加到您的 gemfile 中

gem "figaro"
Run Code Online (Sandbox Code Playgroud)

进行捆绑安装

$ bundle exec figaro install
Run Code Online (Sandbox Code Playgroud)

这将添加文件config/application.yml(您应该将其添加到您的.gitignore

您可以在其中添加 ENV 变量

# config/application.yml

google_client_id: "this is my google id"
google_client_secret: "this is my client secret"
Run Code Online (Sandbox Code Playgroud)

之后你可以通过使用访问你的 client_id

ENV["GOOGLE_CLIENT_ID"]
Run Code Online (Sandbox Code Playgroud)