Я создаю службу ecomm с использованием Spree, которая использует Devise, она содержит все данные от наших пользователей, но мы используем ее только как службу, через API, поэтому у нас есть приложение (rails 3.1), клиент/ Потребитель, который использует OmniAuth, имеет собственную стратегию, которая через Oauth2 перенаправляет запросы поставщику, показывает страницу sign is, а затем пропускает запрос через метод authorize, а затем весь процесс oauth2 работает без сбоев до обратного вызова.и затем пользователь входит в систему нашего потребителя.
До этой части все работает правильно, это мой класс стратегии:
module OmniAuth
module Strategies
class MyStrategy < OAuth2
def initialize(app, api_key = nil, secret_key = nil, options = {}, &block)
client_options = {
:site => CUSTOM_PROVIDER_URL,
:authorize_url => "#{CUSTOM_PROVIDER_URL}/auth/my_provider/authorize",
:token_url => "#{CUSTOM_PROVIDER_URL}/auth/my_provider/access_token"
}
super(app, :onyx_oauth, api_key, secret_key, client_options, &block)
end
protected
def user_data
response = @access_token.get("/auth/my_provider/user.json");
if response.status.to_i == 200
@data ||= MultiJson.decode(response.body);
else
raise 'Service error'
end
end
def request_phase
options[:scope] ||= "read"
super
end
def user_hash
user_data
end
def auth_hash
OmniAuth::Utils.deep_merge(super, {
'uid' => user_data["uid"],
'user_info' => user_data['user_info'],
'extra' => user_data['extra']
})
end
end
end
end
То, что я пытаюсь сделать, - это иметьвойдите в форму в клиентском приложении, а затем, используя мою собственную стратегию, отправьте эти учетные данные (электронная почта / пароль) поставщику (я думаю через заголовки HTTP_AUTHORIZATION), чтобы войти в систему провайдера, пропустив форму входа впровайдер, поэтому после того, как devise аутентифицирует пользователя, он проходит через метод authorize и позволяетole Oauth2 процесс продолжается.
Я пробовал несколько вещей, которые включают определение вызова метода (env) в стратегии и установку env ['HTTP_AUTHORIZATION'] с учетными данными, такими как "email: пароль", перед вызовом super.Я также включил в метод request_phase ключ HTTP_AUTHORIZATION в хэш опций, даже внутри ключа: headers.Моя последняя попытка состояла в том, чтобы включить его в хеш заголовков в объект соединения Фарадея в объекте client (OAuth2 :: Client instance) класса.
После отладки почти всего процесса и попытки включить его вездемой провайдер продолжает не получать этот конкретный ключ в заголовках, даже отлаживая провайдер, когда Devise тестирует каждую стратегию ... но не удача в конце концов.
Я действительно ценю, если кто-то скажет мне, что яделать неправильно или если то, что я пытаюсь сделать, не может быть сделано так, как я это делаю, или если есть более простой способ сделать это ..
Заранее спасибо, извините за очень длинный пост/ вопрос, и еще раз спасибо за ваше время!