Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 缺少必需的客户端标识符-Google日历_Ruby On Rails - Fatal编程技术网

Ruby on rails 缺少必需的客户端标识符-Google日历

Ruby on rails 缺少必需的客户端标识符-Google日历,ruby-on-rails,Ruby On Rails,我遵循本教程在Rails应用程序上实现google日历。 config/initializer/omiauth.rb Rails.application.config.middleware.use OmniAuth::Builder do provider :google_oauth2, ENV['my_long_key'], ENV['my_other_key'], { scope: "userinfo.email, ca

我遵循本教程在Rails应用程序上实现google日历。

config/initializer/omiauth.rb

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :google_oauth2,
           ENV['my_long_key'],
           ENV['my_other_key'],
           { scope: "userinfo.email, calendar" }
end
class ExampleController < ApplicationController
  before_action :authenticate_candidate!, except: [:redirect]
  before_action :authenticate_interviewer!, except: [:client_options]


  def redirect
    client = Signet::OAuth2::Client.new(client_options)
    redirect_to client.authorization_uri.to_s
  end

  private

  def client_options
    {
      client_id: ENV["google_client_id"],
      client_secret: ENV["google_client_secret"],
      authorization_uri: "https://accounts.google.com/o/oauth2/auth",
      token_credential_uri: "https://accounts.google.com/o/oauth2/token",
      scope: Google::Apis::CalendarV3::AUTH_CALENDAR,
      redirect_uri: callback_url

    }
  end
end
我还生成了config/secrest.yml(它不存在):

控制器/example_controller.rb

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :google_oauth2,
           ENV['my_long_key'],
           ENV['my_other_key'],
           { scope: "userinfo.email, calendar" }
end
class ExampleController < ApplicationController
  before_action :authenticate_candidate!, except: [:redirect]
  before_action :authenticate_interviewer!, except: [:client_options]


  def redirect
    client = Signet::OAuth2::Client.new(client_options)
    redirect_to client.authorization_uri.to_s
  end

  private

  def client_options
    {
      client_id: ENV["google_client_id"],
      client_secret: ENV["google_client_secret"],
      authorization_uri: "https://accounts.google.com/o/oauth2/auth",
      token_credential_uri: "https://accounts.google.com/o/oauth2/token",
      scope: Google::Apis::CalendarV3::AUTH_CALENDAR,
      redirect_uri: callback_url

    }
  end
end
但是

当我去:

我得到:
缺少所需的客户端标识符。


最有可能的是,您的google凭据中的env变量没有传递到进程(即
env[“google\u client\u id”]
或者其他变量)

谢谢,我如何验证它们是否已传递?如果我从
example\u controller
中放入
client
,我会得到以下结果:
。…}>
您可以使用
put“google\u client\u id:{ENV[“google\u client\u id”]}
例如,如果控制台中为空,那么它就不会传递到我应该放在哪个文件中
config/initializer/omiauth.rb
?您可以将其放在
def client_options
方法的第一行,但通常是在Rails过程中执行的任何文件中