Rails 3, Authlogic, NGINX и HTTP базовая аутентификация не работают вместе

Я нахожусь на ранних стадиях создания приложения с использованием Rails 3. Аутентификация пользователя основана на Authlogic, который я настроил довольно стандартно ( в соответствии с примерами документов), и все работает локально, как и ожидалось.

Я только что развернул приложение на чистой серверной установке Centos 5.4 / NginX / Passenger, чтобы сотрудники могли начать входить в систему и вводить контент и т. Д. Однако мы далеки от того, чтобы быть готовыми для всеобщего обозрения, поэтому я использовал Основной модуль аутентификации NginX, позволяющий сохранить весь сайт за другим уровнем аутентификации.

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

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

2 ответа

Решение

Я могу ответить на свой вопрос (после нескольких часов поиска в совершенно неправильном месте). Хороший рецензия на Authlogic::Session::Config сделал трюк.

class UserSession < Authlogic::Session::Base
  allow_http_basic_auth false
end

Я до сих пор не пробовал Rails 3, поэтому мой ответ будет более общим. И я не знаю базовый модуль аутентификации для NginX.

  1. Если ваша команда подключена локально, вы можете создать сервер, доступный только из локальной сети.
  2. Если вам нужен доступ через Интернет, то вы можете скрыть его за VPN.
  3. Вы можете настроить доступ к сайту только через локальный ip и дать доступ ssh всем, кому это нужно. Прокси-носки легко создать через ssh (в linux: ssh -D 8080 user@yourserver.com; где 8080 - номер порта, затем установите прокси-сервер socks в браузере, и вы можете пообедать yoursever.com:3000).
  4. Я думаю, что NginX позволяет вам устанавливать разрешенные IP-адреса и запрещать другие - так что вы можете использовать его и для ограничения доступа.
  5. А также вы можете временно добавить в ApplicationControllerbefore_filter :require_login:), так что только страница входа будет доступна миру.

Надеюсь, поможет!

Другие вопросы по тегам