【发布时间】:2012-10-23 02:48:24
【问题描述】:
我正在为 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
为了传递令牌,他们需要在 URL 中使用 access_token 参数。当我直接在 raw_info 函数中指定选项时,如在示例中 - 没关系。
当我尝试在 access_token_options 哈希中指定此选项时(如在注释部分中) - 参数未传递给令牌。我在 Ruby 方面不是很好,所以我没有从库源中弄清楚——如何正确地将参数传递给 OmniAuth OAuth2 后代中的 access_token。
我想让它“正确的方式”,所以使用正确的选项初始化 access_token,请有人指出正确的方式。
谢谢!
【问题讨论】: