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

How to perform GET/POST request using OmniAuth

我正在使用 omniauth-exact gem to authenticate the user to ExactOnline, it works perfectly good but after authenticating the user I also need to query back to ExactAPI 并获取一些数据,以防万一我应该使用 GET,POST 方法之一。

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

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

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

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