使用命名空间时的Devise和current_user问题

时间:2011-11-17 14:01:29

标签: ruby-on-rails session namespaces devise

在核心网站上,我使用标准的Devise配置进行用户身份验证。在routes.rb中:

devise_for :users

现在,我有一个名称空间,我们称之为“框架”,用于通过远程页面上的小窗口(或iframe)中的某些控制器显示一些视图。 我需要在框架内验证用户,因此我嵌套了devise_for声明:

namespace :frame do
  devise_for :users
  resources :albums, :only => :show do
    resources :photos, :only => [:new, :create, :show]
  end
end

要使整个工作正常,我需要创建适当的控制器:

class Frame::SessionsController < ::Devise::SessionsController
  layout "frame"
end

现在我使用以下路径显示表单:

new_frame_user_session_path

但是。当我通过框架登录时,* current_user *为nil,而我有* current_frame_user *。这很糟糕,因为通过核心网站(* current_user *)登录的用户应该可以通过框架和反向(在一个浏览器中)使用。

是否需要进行一些调整才能实现,或者我应该改变整个方法?谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

解决方案是让我在 views / frame / sessions / new.html.haml 中更改登录表单。

而不是:

= simple_form_for resource, :as => resource_name, :url => session_path(resource_name) do |f|

我需要覆盖资源名称:

= simple_form_for resource, :as => :user, :url => session_path(:user) do |f|

现在我能够在框架内登录,并且用户的会话在框架和网站其余部分之间保持一致。