如何使用OmniAuth执行GET / POST请求

时间:2015-12-14 07:57:45

标签: ruby-on-rails ruby omniauth exact-online

使用omniauth-exact gemExactOnline用户进行身份验证后,效果非常好,但在对用户进行身份验证后,我还需要查询ExactAPI并获取一些数据,以防万一应该使用GET,POST方法。

callback会返回用户信息,tokenrefresh token,因此我需要使用访问令牌来使用omniauth从Exactonline API请求数据。我该如何存档呢。

1 个答案:

答案 0 :(得分:0)

OmniAuth实际上只是用于验证用户身份的工具。如果您想对api执行一些操作,而这些操作实际上不是认证流程的一部分,您通常会保存访问令牌并将其与API客户端一起使用。

您可以在处理Omniauth回调的处理程序中获取令牌:

class class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
  def exact
    auth_hash = request.env["omniauth.auth"]
    session[:token] = auth_hash[:credentials][:token]
    # ... 
  end
def 

对于像Twitter或Facebook这样的提供商,有现成的API客户端,但在这种情况下,您可能希望使用Intridea's generic OAuth2 library来创建客户端。

require 'oauth2'
client = OAuth2::Client.new('client_id', 'client_secret', site: 'https://start.exactonline.nl/api')
access_token = OAuth2::AccessToken.new(client, session[:token])
response = access_token.post('/api/v1/something', { foo: :bar })

case response.status
when 201:
  # ...
when 401:
  # ... 
end

我鼓励您创建一个客户端类或服务对象来处理这个问题 - 不要将它内联到您的控制器中,因为它非常混乱且难以正确测试。

以下是现有API客户端的一些示例: