我正在尝试使用我的项目中的omniauth-google-oauth2 gem进行Google身份验证,并且在关注localhost:3000 / auth / google_oauth2 /链接时偶然发现了以下错误.
这是为什么?
配置/初始化/ omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do
provider :google_oauth2, ENV["GOOGLE_CLIENT_ID"], ENV["GOOGLE_CLIENT_SECRET"]
end
配置/ routes.rb中
Rails.application.routes.draw do
get '/auth/:provider/callback', to: 'sessions#create'
root to: 'welcome#index'
end
配置/ 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"] %>
最佳答案 它看起来不像您设置的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
您的示例不起作用的原因是您没有将ENV [“GOOGLE_CLIENT_ID”]设置为任何值.要设置ENV变量(在Linux中),您可以在控制台上执行以下任何操作
export GOOGLE_CLIENT_ID=my_client_id
然而,这只会在该会话中设置变量,为了使这个永久化你必须编辑你的〜/ .bash_profile
$vi ~/.bash_proflle
并在该文件中添加上面的行.
如何访问secrets.yml中的变量?
当您向config / secrets.yml文件添加信息时,可以使用它们来访问它们
Rails.application.secrets.my_key_name
我想将我的ENV变量存储在YML文件中
为此,您可以使用Figaro gem
将gem添加到gemfile中
gem "figaro"
捆绑安装
$bundle exec figaro install
这将添加文件config / application.yml(您应该添加到.gitignore)
在那里你可以添加你的ENV变量
# config/application.yml
google_client_id: "this is my google id"
google_client_secret: "this is my client secret"
在此之后,您只需使用即可访问您的client_id
ENV["GOOGLE_CLIENT_ID"]