Аутентификация между приложениями с использованием OAuth - PullRequest
1 голос
/ 02 февраля 2012

У меня есть два приложения рельсов, работающих на разных портах.Первый на 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]), в противном случае меня перенаправят на страницу входа.

Ответы [ 2 ]

1 голос
/ 02 февраля 2012

Вы не авторизованы у провайдера.

При каждом запросе к вашему API вы получите токен доступа (либо в параметрах, либо в заголовке), и из этого токена вы сможете определить, кто является current_user. Между запросами нет сеанса.

Этот камень может помочь, если вам нужен поставщик OAuth.

0 голосов
/ 02 февраля 2012

load_and_authorize_resource запретит доступ к действию info.просто добавьте :except атрибут

    load_and_authorize_resource :except => [:info]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...