2010-12-27 5 views
0

ので、ここでは、関連するルート Ruby on Rails:複数のコントローラでHTTP認証をどうやって行うのですか?

map.namespace "admin" do |admin| 
    admin.root :controller => :site_prefs, :action => :index 
    admin.resources :site_prefs 
    admin.resources :link_pages 
    admin.resources :menu_bars 
    admin.resources :services 
    admin.resources :users 
    end 

があり、私は1つのコントローラのためにこれを持っている:

before_filter :authenticate 

    protected 

    def authenticate 
    authenticate_or_request_with_http_basic do |username, password| 
     username == "1234" && password == "1234" 
    end 
    end 

私はそれらのコントローラのいずれかの中にどんなページを認証しないように私の管理コントローラを設定するにはどうすればよいですすべての管理者コントローラーの間で一度認証されるだけで、コードはすべて1つの場所にあります。そう....ええ

答えて

3

は、「管理者の作成...

は今、私が認証を考えることができる唯一のは、各コントローラに認証コードをコピーすることであり、私は重複したコードを有する嫌い:: ApplicationControllerから継承する "BaseController"を返します。 before_filterをそのコントローラに入れ、基本認証を渡します。その後、他のすべての管理者コントローラーにこのBaseControllerを継承させます。

+0

私はこの解決策が好きです。 +1 –

+0

私はこのアイディアも好きですが、明らかに私は新しいコントローラーの作成に失敗しています。私はAdmin :: BaseController NullVoxPopuli

+0

BaseControllerをadminフォルダに移動して問題を解決しました – NullVoxPopuli

1

ApplicationControllerで認証コードとbefore_filterを移動できます。

あなたのフィルタコードはrequest.fullpathを見て、/ adminで始まるかどうかを確認し、そうであれば認証します。

1

はここで管理者を作成するにはすてきなきれいな方法です:: Railsの3+アプリでBaseControllerクラス:

  1. お使いのコントローラのフォルダ(app/controllers/admin
  2. adminフォルダを作成中に新しいファイルを作成します。管理フォルダ:モジュール内base.rb

置きコントローラクラス:

module Admin 
    class Base < ApplicationController 

    http_basic_authenticate_with :name => "name", :password => "password" 

    end 
end 
あなたの管理者フォルダ内のすべての他のコントローラ用

その後、Admin::BaseController継承:

module Admin 
    class Users < BaseController 
    # method definitions 
    end 
end 

これを行うことにより、あなたはadminディレクトリ内の素晴らしく、整頓、すべての管理者に関連するファイルを保持することができ、そして、彼らはすべての意志彼らはAdmin::BaseControllerから継承されているため、認証されます。

関連する問題