使用omniauth-exact gem对ExactOnline用户进行身份验证后,效果非常好,但在对用户进行身份验证后,我还需要查询ExactAPI并获取一些数据,以防万一应该使用GET,POST
方法。
callback
会返回用户信息,token
和refresh token
,因此我需要使用访问令牌来使用omniauth
从Exactonline API请求数据。我该如何存档呢。
答案 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客户端的一些示例: