在核心网站上,我使用标准的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 *)登录的用户应该可以通过框架和反向(在一个浏览器中)使用。
是否需要进行一些调整才能实现,或者我应该改变整个方法?谢谢你的帮助。
答案 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|
现在我能够在框架内登录,并且用户的会话在框架和网站其余部分之间保持一致。