0

我正在使用omniauth-exact gem对用户进行身份验证ExactOnline,它工作得非常好,但在验证用户身份后,我还需要查询回ExactAPI并获取一些数据,以防万一应该使用任何GET,POST一种方法。

callback返回用户信息,token因此我refresh token需要使用访问令牌从 Exactonline API 请求数据omniauth。我怎样才能存档这个。

4

1 回答 1

1

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 的通用 OAuth2 库来创建客户端。

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 客户端的一些示例:

于 2015-12-14T09:03:41.963 回答