2015-12-14 2 views
0

Am использует omniauth-exact gem для аутентификации пользователя до ExactOnline, он работает отлично, но после аутентификации пользователя мне также нужно запросить обратно ExactAPI и получить некоторые данные, которые в случае, если я буду использовать либо GET,POST способ.Как выполнить запрос GET/POST с использованием OmniAuth

В callback возвращается обратно пользователям информацию, token и refresh token так что мне нужно использовать маркер доступа для запроса данных из Exactonline API с помощью omniauth. Как я могу архивировать это.

ответ

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:

Смежные вопросы