Nimble.comAPIのカスタム戦略を作成しています。彼らは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があまり得意ではないため、ライブラリのソースからはわかりませんでした。OmniAuthOAuth2の子孫のaccess_tokenにパラメーターを正しく渡す方法です。
私はそれを「正しい方法」にしたいので、access_tokenは正しいオプションで初期化され、誰かが私に正しい方法を教えてください。
ありがとうございました!