Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.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 OmniAuth OAuth2如何访问策略->;客户这样我就可以刷新令牌了? 背景_Ruby On Rails_Ruby_Oauth 2.0_Omniauth - Fatal编程技术网

Ruby on rails OmniAuth OAuth2如何访问策略->;客户这样我就可以刷新令牌了? 背景

Ruby on rails OmniAuth OAuth2如何访问策略->;客户这样我就可以刷新令牌了? 背景,ruby-on-rails,ruby,oauth-2.0,omniauth,Ruby On Rails,Ruby,Oauth 2.0,Omniauth,我在rails应用程序上有一个omniauth-oauth2子类策略。当刷新access\u令牌时,我看到我需要创建OAuth2::AccessToken。但要创建它,似乎需要OAuth2::Client,我认为这可以从“omniauth-OAuth2子类策略”中获得 找到了这个解决方案 这就是他们如何解决问题以获得策略的方法 #初始参数:nil是一个机架对象,但由于 #我们这里不用它,我们给它零分 strategy=OmniAuth::strategys::您的\u提供者。新的nil,客户端\

我在rails应用程序上有一个omniauth-oauth2子类策略。当刷新access\u令牌时,我看到我需要创建
OAuth2::AccessToken
。但要创建它,似乎需要
OAuth2::Client
,我认为这可以从“omniauth-OAuth2子类策略”中获得

找到了这个解决方案 这就是他们如何解决问题以获得策略的方法

#初始参数:nil是一个机架对象,但由于
#我们这里不用它,我们给它零分
strategy=OmniAuth::strategys::您的\u提供者。新的nil,客户端\u id,客户端\u secret
client=strategy.client
您的\u已在\u过期\u from\u您的\u提供者=Time.now.to\u i
散列={
access_token:“您的提供商提供的access_token”,
刷新令牌:“来自提供商的刷新令牌”,
expires\u at:您的\u已从\u供应商处过期\u,
}
access\u token\u object=OAuth2::AccessToken.from\u散列(客户端,散列)
访问\u令牌\u对象。刷新!

问题 我不明白的是,通过给第一个参数
nil
来创建策略似乎有点老套

“omniauth-oauth2子类策略”在机架中(如下图所示),因此我认为有一种方法可以从机架中间件的某个地方访问策略

问题 创建上述策略是刷新令牌的唯一方法吗?

策略->客户端->访问\u令牌\u对象->刷新

我找不到正确的方法,但为我的自定义omniauth策略制定了一个变通方法:

class MyOrg < OmniAuth::Strategies::OAuth2
  #...
  info do
    {
      'email'        => extra['user'].try(:[], 'email'),
      # ...
      'get_org' => Proc.new do
        get_org
      end
    }
  end

  def get_org
    @org ||= begin
      org_id = extra['user'].try(:[], 'org_id')
      access_token.get(options[:client_options][:site] + "/v1/orgs/#{org_id}").parsed
    end
  end


end

我利用
oauth2
gem来进行刷新。以下是使用omniauth策略访问google API的完整解决方案:

hash[:info][:get_org].call