Ruby on Rails: как вы выполняете HTTP-аутентификацию на нескольких контроллерах? - PullRequest
0 голосов
/ 27 декабря 2010

Итак, вот соответствующие маршруты

 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

И у меня это для одного контроллера:

before_filter :authenticate

  protected

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

Как настроить контроллеры администратора для аутентификации независимо от того, к какой странице внутри любого из этих контроллеров осуществляется переход, при этом она должна проходить аутентификацию только один раз среди всех контроллеров администратора и иметь код в одном месте.

Прямо сейчас, единственное, что я могу придумать для аутентификации, это скопировать код авторизации в каждый контроллер, и я ненавижу иметь дублирующийся код ... так что ... да

Ответы [ 3 ]

3 голосов
/ 27 декабря 2010

Создайте «Admin :: BaseController», который наследуется от ApplicationController.Поместите before_filter в тот контроллер, который управляет основной аутентификацией.Затем пусть все остальные контроллеры администратора наследуются от этого BaseController.

1 голос
/ 04 октября 2011

Вот хороший чистый способ создать класс Admin :: BaseController в приложении Rails 3+:

  1. Создать папку admin в папке контроллеров (app/controllers/admin)
  2. Создайте новый файл в папке администратора: 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::BaseController.

1 голос
/ 27 декабря 2010

Вы можете переместить код аутентификации и before_filter в ApplicationController.

Код вашего фильтра может посмотреть на request.fullpath, чтобы увидеть, начинается ли с / admin и, если это так, аутентифицировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...