【发布时间】:2011-12-31 09:15:57
【问题描述】:
在核心网站上,我使用标准的 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*) 登录的用户应该可以通过框架和反向访问(在一个浏览器中)。
是否有一些调整可以实现它,或者我应该改变整个方法?谢谢你的帮助。
【问题讨论】:
-
我怀疑 Rails 会将 iframe 和周围的页面视为两个不同的浏览器,因此您将无法从框架访问页面的
current_user,反之亦然。不过只是预感。 -
实际上 iframe 在此任务中与我无关(我使用通过 javascript 打开的窗口)。当我登录核心站点时,可以在该窗口中访问 current_user。
-
为什么首先要添加命名空间?如果您只想拥有一个不同的 URL,则可以在 devise_for 调用中添加路径选项...您可以通过将控制器选项添加到 devise_for 来将控制器保存在单独的命名空间中。
-
我需要为常规登录和 framed 登录提供完全分离的布局,并将所有内容(包括会话)放入命名空间似乎对我有帮助。
标签: ruby-on-rails session namespaces devise