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: