У меня есть два приложения рельсов, работающих на разных портах.Первый на 3000, а второй на 4000. Оба они используют Devise Gem для аутентификации.Первое приложение играет роль поставщика OAuth, а второе - потребителя OAuth.Я следовал этим и этим учебным пособиям для построения моей среды.
Почти все работает нормально.Я успешно сгенерировал ключ и секрет для потребительского приложения.И успешно авторизуйтесь в приложении провайдера.
В моем клиентском приложении есть два метода:
def auth
@consumer = OAuth::Consumer.new 'KEY', 'SECRET', :site => "http://localhost:3000"
@request_token = @consumer.get_request_token
session[:request_token] = @request_token
redirect_to @request_token.authorize_url
end
def auth_callback
@request_token ||= session[:request_token]
@access_token = @request_token.get_access_token :oauth_verifier => params[:oauth_verifier]
@request = @access_token.get '/user_info.json'
render :text => @request.body.inspect
end
И метод API в приложении провайдера:
class UsersController < InheritedResources::Base
before_filter :login_or_oauth_required
load_and_authorize_resource
def info
logger.info current_user.present? # => false
@info = { } # here I've collect user info for current_user
respond_to do |format|
format.json { render :json => @info }
end
end
end
Дерьмо происходит, когдаЯ пытаюсь получить информацию о пользователе в строке: @request = @access_token.get '/user_info.json'
Когда я вызываю ее в пользовательском приложении, пользователь уже не авторизован в приложении поставщика.
Как мне остаться авторизованным на ресурсе поставщика?
upd: у меня есть current_user.present? # => false
на случай, если я пройду авторизацию для действия info
(before_filter :login_or_oauth_required, :except => [:info]
), в противном случае меня перенаправят на страницу входа.