2011-11-17 50 views
1

核心网站时,我使用的用户认证标准设计配置。在routes.rb中:设计和CURRENT_USER问题使用命名空间

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 *为零,而我有* current_frame_user *。这很糟糕,因为通过核心网站(* current_user *)登录的用户应该可以通过框架和反向访问(在一个浏览器中)。

是否有一个小调整才达到它,或者我应该改变整个的方法呢?谢谢你的帮助。

+0

我怀疑是Rails会处理iframe和周围的页面,好像他们是两个不同的浏览器,所以你将不能够从框架的,反之亦然访问页面的'current_user'。只是一个预感。 – Russell

+0

其实iframe在本任务中与我无关(我使用通过javascript打开的窗口)。当我在核心站点上登录时,可以在该窗口中访问current_user。 –

+0

为什么要在第一个地方添加命名空间?如果您只想拥有一个独特的URL,则可以向devise_for调用添加路径选项...您可以通过将devise_for的控制器选项添加到单独的名称空间中,从而将控制器保留在独立的名称空间中。 – HakonB

回答

2

的解决方案是为我改变的登录形式的意见/帧/会话/ 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| 

现在我可以在框架内登录和用户的会话框架和之间的连贯网站的其余部分。

+0

你救了我的一天!谢谢Dude – OWZY

+0

我没有看到登录系统和current_user定义本身之间的链接,你确定只有这样做吗? – Laurent