我正在使用omniauth-exact gem对用户进行身份验证ExactOnline,它工作得非常好,但在验证用户身份后,我还需要查询回ExactAPI并获取一些数据,以防万一应该使用任何GET,POST
一种方法。
callback
返回用户信息,token
因此我refresh token
需要使用访问令牌从 Exactonline API 请求数据omniauth
。我怎样才能存档这个。
我正在使用omniauth-exact gem对用户进行身份验证ExactOnline,它工作得非常好,但在验证用户身份后,我还需要查询回ExactAPI并获取一些数据,以防万一应该使用任何GET,POST
一种方法。
callback
返回用户信息,token
因此我refresh 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 的通用 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 客户端的一些示例: