0

Ruby 1.8.7 및 Rails 3.2.13을 사용하면 BaseController 관리자 "섹션"이 있습니다. 거의 모든 페이지를 로그인 한 사용자로만 제한하려고합니다. 로그인하지 않은 사용자가 볼 수있는 유일한 페이지는 로그인, 암호 분실 등입니다. 현재 컨트롤러와 동작 목록을 "열린"상태로 유지하고 있지만 더 나은 방법이 있다고 생각합니다. 사용자가 이미 인증하거나 액세스하는 제어기/액션 @@non_authorized_paths 목록 인 경우로그인에서 특정 작업을 제외하는 방법은 무엇입니까?

class Admin::BaseController < ApplicationController 
    @@non_authorized_paths = [ 
    { :controller => "admin/account" , :actions => [ "login", "login_post", "logout", "forgot_password", "forgot_password_post", "reset_password", "reset_password_post" ]} 
    ] 

    layout "admin/layouts/admin" 
    before_filter :authorized? 

    def authorized? 
    if (session[:user] != nil || @@non_authorized_paths.any? {|o| o[:controller] == params[:controller] && o[:actions].any? { |a| a == params[:action] } }) 
     return 
    end 

    flash[:warning] = "You should login before doing that." 
    redirect_to :controller => "admin/account", :action => "login" 
    end 
end 

기본적 리디렉션 일절 발생하지 않는다.

답변

1
before_filter :authorized?, :except => ['login', 'login_post', 'logout', etc.] 

이러한 작업은 sessions_controller에 있습니까? 당신은 그 클래스에 before 필터를 추가 할 수 있어야합니다. 관심있는 액션에 대해 skip_before_filter을 가져야합니다. :only 또는 :except을 사용하여 목록을 짧게 유지할 수 있습니다.

+0

감사합니다. 감사합니다. 감사합니다. –

관련 문제