REST API: пользовательский метод с использованием файлов cookie и сеансов - PullRequest
0 голосов
/ 26 декабря 2010

Я пытаюсь использовать REST API, поэтому я хочу получить @current_user в APP2 из RoR APP1 .

В APP1 / config / rout.rb У меня есть этот код:

  resources :users do
    collection do
      get 'current'
    end
  end

В APP1 / controllers / application_controller.rb У меня есть этот код:

 before_filter :current_user

 def current_user
    if cookies[:remember_me]
      current_user = user_from_cookie
    else
      current_user = User.find_by_id(session[:current_user_id])
    end
    unless !current_user.nil?
      default_current_user = User.find_by_id(1)
    end
    return @current_user = current_user.nil? ? default_current_user : current_user
  end

В APP1 / controllers / users_controller.rb У меня есть этот код:

  def index
      ...
  end

  def show
      ...
  end

  ...

  def current
    respond_to do |format|
      format.xml  { render :xml => @current_user }
    end
  end

В APP2 / models / user.rb У меня есть этот код:

class User < ActiveResource::Base
  self.site = "http://APP1"
end

В APP2 / controllers / application_controller.rb У меня есть этот код:

  before_filter :current_profile

  def current_profile
    @current_profile = User.get(:current)
  end

Теперь, если я войду в свой User2 в APP1 и перейду на http://APP1/users/current.xml URL, я получу правильный @current_user (объект User2), но если я пойду на http://APP2/,, хотя у меня есть 'before_filter's', @current_profile всегда будет default_current_user (объект User.find_by_id (1)) вместо User2 .

Кажется, пофиг этот код из APP1 / controllers / application_controller.rb:

if cookies[:remember_me]
  current_user = user_from_cookie
else
  current_user = User.find_by_id(session[:current_user_id])
end

Что не так?

EDITED

Может быть, мы сможем решить эту проблему с помощью параметров APP1 / config / rout.rb (?!):

Пример: в APP1 / config / rout.rb

  resources :users do
    collection do
      get 'current', :current_user => @current_user # ?!
    end
  end

или что-то в этом роде.

Ответы [ 2 ]

0 голосов
/ 26 декабря 2010

Когда вы делаете запрос на другой сайт, куки текущего пользователя не доступны.Запрос поступает с сервера на сервер, поэтому приложение ничего не знает о запрашивающем его пользователе.Я думаю, что решением было бы отправить параметры самостоятельно и проверить их.

0 голосов
/ 26 декабря 2010

Если APP2 запрашивает что-то у APP1 через ActiveResource, это не то же самое, что APP1, вошедший в систему, запрашивающий его у пользователя.Пользовательские куки не пересылаются.Кто-нибудь поправит меня, если это чепуха.:)

Аутентификационная часть здесь http://api.rubyonrails.org/classes/ActiveResource/Base.html имеет несколько допустимых опций в списке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...