REST API:使用cookie和会话的自定义方法

我正在尝试使用REST API,所以我想从一个RoR APP1中获取APP2中的@current_user。

APP1 /config/routes.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 

现在,如果我在APP1中登录我的User2并转到http:// APP1 /users/current.xml URL,我会得到正确的@current_user(User2对象),但如果我转到http:// APP2 /,甚至虽然我有’before_filter’,但@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/routes.rb参数(?!)来解决这个问题:

示例:在APP1 /config/routes.rb中

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

或类似的东西。

当您向其他网站发出请求时,无法访问当前用户的cookie。 请求是从服务器到服务器,因此应用程序对请求它的用户一无所知。 我认为解决方案是自己发送参数并检查这些参数。

如果APP2通过ActiveResource从APP1请求某些内容,则它与请求它的APP1登录用户不同。 用户cookie不会被“转发”。 有人纠正我,如果这是无稽之谈。 🙂

此处的身份validation部分http://api.rubyonrails.org/classes/ActiveResource/Base.html列出了几个有效选项。