Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.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 为基于OmniAuth OAuth2的策略指定令牌选项_Ruby_Oauth_Omniauth - Fatal编程技术网

Ruby 为基于OmniAuth OAuth2的策略指定令牌选项

Ruby 为基于OmniAuth OAuth2的策略指定令牌选项,ruby,oauth,omniauth,Ruby,Oauth,Omniauth,我正在为Nimble.com API创建自定义策略。因为他们使用的是OAuth,所以非常简单 require 'omniauth-oauth2' module OmniAuth module Strategies class Nimble < OmniAuth::Strategies::OAuth2 option :name, "nimble" option :client_options, { :site => "https:

我正在为Nimble.com API创建自定义策略。因为他们使用的是OAuth,所以非常简单

require 'omniauth-oauth2'

module OmniAuth
  module Strategies
    class Nimble < OmniAuth::Strategies::OAuth2
      option :name, "nimble"

      option :client_options, {
        :site => "https://api.nimble.com",
        :authorize_url => '/oauth/authorize',
        :token_url => '/oauth/token'
      }

      # option :access_token_options, {
      #   :mode => :query,
      #   :param_name => :access_token
      # }      

      option :provider_ignores_state, true

      uid { raw_info['email'] }

      info do
        {
          'uid'   => raw_info['email'],
          'name'  => raw_info['name'],
          'email' => raw_info['email']
        }
      end

      extra do
        { 'raw_info' => raw_info }
      end

      def raw_info
        access_token.options[:mode] = :query
        access_token.options[:param_name] = :access_token        
        @raw_info ||= access_token.get('/api/users/myself/', {:parse => :json}).parsed
      end
    end
  end
end
需要'omniauth-oauth2'
模块OmniAuth
模块策略
类灵活“https://api.nimble.com",
:authorize_url=>'/oauth/authorize',
:token_url=>'/oauth/token'
}
#选项:访问\u令牌\u选项{
#:mode=>:查询,
#:param_name=>:访问\u令牌
# }      
选项:提供程序\u忽略\u状态,true
uid{raw_info['email']}
信息做
{
'uid'=>原始信息['email'],
“名称”=>原始信息[“名称”],
'email'=>原始信息['email']
}
结束
额外做
{'raw\u info'=>raw\u info}
结束
def原始信息
访问令牌。选项[:模式]=:查询
访问\u令牌。选项[:参数\u名称]=:访问\u令牌
@raw_info | |=access_token.get('/api/users/imf/',{:parse=>:json})。已解析
结束
结束
结束
结束
为了传递令牌,他们需要在URL中使用access_token参数。当我直接在raw_info函数中指定选项时,就像在示例中一样-这没关系

当我试图在access\u token\u options散列中指定此选项时(如在注释部分中),参数不会传递给token。我对Ruby不是很在行,所以我没有从库源代码中弄清楚如何正确地传递参数以访问OmniAuth OAuth2子体中的_令牌

我想让它成为“正确的方式”,所以使用正确的选项初始化访问令牌,请有人告诉我正确的方式


谢谢大家!

我探讨了几种现有的策略(GitHub,4SQ),看起来直接修改访问令牌选项是正常的做法

所以我会坚持下去:)