Я ответил на вопрос, аналогичный вчера, с простым решением в самом Rails; Я использую это решение для защиты сайта разработки от заражения во время тестирования. Я разместил его ниже для удобства.
В Rails есть встроенный помощник для этого, вы можете поместить его в свой контроллер приложения:
protected
def authenticate
authenticate_or_request_with_http_basic do |username, password|
username == "admin" && password == "test"
end
end
Затем используйте before_filter на любых контроллерах, которые вы хотите защитить (или просто вставьте его в контроллер приложений, чтобы заблокировать весь сайт):
before_filter :authenticate
Этот метод работает как на Nginx, так и на Apache, что является дополнительным бонусом. Однако это не сработает, если у вас включено кэширование всей страницы - поскольку посетитель никогда не попадет в стек Rails; это не сработает.
Редактировать
Просто заметил, что вы указали маршрут / admin. Все мои административные контроллеры наследуются от AdminController. Вы можете настроить свой так:
/ приложение / контроллеры / администратор / admin_controller.rb
class Admin::AdminController < ApplicationController
before_filter :authenticate
protected
def authenticate
authenticate_or_request_with_http_basic do |username, password|
username == "admin" && password == "test"
end
end
end
Затем все ваши контроллеры расширяют контроллер администратора, например:
class Admin::ThingsController < Admin::AdminController
Мои маршруты настроены так:
map.namespace :admin do |admin|
admin.resources :things
end
Надеюсь, это поможет.