2013-06-18 84 views
0

我需要控制用戶當前是否登錄了我的網站,但我有一個問題來初始化我用於此控件的變量:session[:user_id]會話[:user_id]初始化

這是我使用的代碼:我把這個方法,我想阻止對未登錄用戶的所有控制器,使用此代碼

def authenticate_user 
    if session[:user_id].nil? 
     redirect_to(:controller => 'users', :action => 'index') 
     return false 
    else 
     # set current_user by the current user object 
     @current_user = User.find session[:user_id] 
     return true 
    end 
end 

before_filter :authenticate_user, :only => [:index,:show,:edit] 

在我看來,問題是session[:user_id]變量,當用戶訪問我的網站變量不會初始化爲nil,因此控件無法正常工作。

我可以初始化索引頁的控制器中的變量,但是這種方法是錯誤的。

例如,當我請求該頁面,而不登錄:

127.0.0.1:3000/menus

錯誤是:

undefined local variable or method `authenticate_user' for #<MenusController:0x007faa6e5a4c20> 

UPDATE :

現在的誤差不但是當用戶還沒有登錄 條件:

if session[:user_id].nil? 

沒有被證實。

如果我宣佈在用戶控制器這種方法:

before_filter :initializes 



def initializes 
    session[:user_id]=nil; 
    end 

它的作品! 此外,如果用戶不需要「索引頁(登錄頁)」,但我不明白爲什麼

+0

你的,除非聲明或許應該是,如果有的authenticate_user。目前的邏輯是「如果有一個用戶ID,重定向到users/index。如果沒有用戶ID,找到一個用戶使用不存在的ID」 – Matt

+0

啊好的!我必須用'如果'替換'除非'。我是吧? –

回答

1

試試這個

在你application_controller.rb

def current_user 
renturn unless session[:user_id] 
@current_user ||= User.find(session[:user_id]) 
end 


def authenticate_user! 
    redirect_to(:controller => 'users', :action => 'index') unless current_user 
end 

和動作指數不應該強制登錄,因爲我們有重定向除非用戶沒有登錄。

在你users_controller.rb

before_filter :authenticate_user!, :only => [:show,:edit] 
0

你定義authenticate_use但你在你的過濾器的呼叫

+0

好的!現在錯誤沒有了,但是當用戶還沒有登錄時 條件: if session [:user_id] .nil? 未驗證。 –