2016-04-14 35 views
0

我有一個users_controller.rb。有太多的方法,包括login,register,forgot_passwordlogout我想把auth允許這些行動在我的紅寶石控制器。如何把驗證允許在像CakePHP紅寶石?

我在CakePHP中完成了$this->Auth->allow

$this->Auth->allow('register', 'login', 'forgot_password', 'logout'); 

但是在紅寶石中這是非常難以擺脫的。請給我建議 -

def login 
    @title = 'Login' 
    #render layout: 'login' 
end 
def dashboard 
    if logged_in? 
     @title = 'My Dashboard' 
     @user = User.get_profile(session[:user_id]) 
     @user = User.get_profile(session[:user_id]) 
     #raise @myProfile.inspect 
    else 
     redirect_to '/login' 
    end 
end 
def my_profile 
    if logged_in? 
    @title = 'My Profile' 
    @user = User.get_profile(session[:user_id]) 
    else 
    redirect_to '/login' 
    end 
end 

def logout 
    log_out 
    redirect_to '/login' 
end 

每次我在我的每一個動作加入if logged_in? ... else ... end。所以 我想把驗證允許在像CakePHP代碼的紅寶石。請幫幫我。

回答

1

看起來您已經創建了自己的身份驗證系統,而不是使用gem,因此如果您想要一種方法來檢查登錄的用戶,可以添加它。

在application_controller.rb

def authenticate_user 
    redirect_to login_path unless logged_in? 
end 

然後在你想要求用戶的任何控制器在你簽署能做

class YourController < ApplicationContoller 
    before_action :authetnicate_user, except: [:actions_that_doesnt_need_auth] 

    ... 
    # All normal methods 
end 

話雖這麼說 - 以前的答案有關使用RESTful資源瞭解並記住這一點很重要。如果你有問題,你可以問:)

+0

我正在關注你的答案。這裏是#' – Chinmay235

+0

錯誤信息'undefined method' authentnicate_user'有點位錯誤的答案。順便說一下你的代碼是寫的。您應該在應用程序控制器中添加'self.authenticate_user'而不是'authenticate_user'。謝謝 :) – Chinmay235

2

這些操作應該在單獨的控制器中,有plentyresources可用來解釋這一點,搜索「RESTful Rails」。

一旦它們位於單獨的控制器中,您可以使用「before」操作來防止未經授權的用戶訪問這些操作。

+0

謝謝你的回答。 :) – Chinmay235

+0

我有另一個問題。登錄後仍然在'http:// localhost:3000/login'頁面打開。 – Chinmay235