2011-11-17 46 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