Я использую текущую версию restful_authentication, которая находится в github, и у меня возникла проблема с некоторыми странными проблемами. Кажется, сервер каким-то образом назначает сеансы пользователям, которых это не должно быть. Это происходит только при скрещивании входного/входного барьера.
Вот пример. Если на сервере нет активных сеансов, я вхожу в учетную запись с пользователем A. На другой машине я вхожу в систему с пользователем B. Затем, когда вы выходите из системы пользователя B, когда-то после перенаправления выхода из системы произойдет, я войду в систему как пользователь A. С этого момента я могу продолжить навигацию по сайту, как если бы я вошел в систему как этот пользователь! Что-то, что я наблюдал через журналы, заключается в том, что когда этот захват происходит, идентификаторы сеансов не совпадают. Пользователь A вошел в оба сеанса, но идентификатор сеанса полностью отличается. Это всего лишь один пример того, что может произойти. Я не могу воспроизвести проблему надежно, поскольку она кажется случайной.
Это не похоже на симптом среды или сервера, на котором он работает. Я могу воспроизвести проблему, используя как дворняжку, так и пассажира. Я также видел это в разработке и производстве. Я использую сеансы на основе db в этом приложении и работает на Rails 2.1.1. При вызове генератора я применил параметр stateful. В противном случае никакие другие изменения не были сделаны в отношении того, как обрабатываются сеансы.
Update Вот метод оскорбления, который пришел непосредственно из restful_authentication.
# Accesses the current user from the session.
# Future calls avoid the database because nil is not equal to false.
def current_user
@current_user ||= (login_from_session || login_from_basic_auth || login_from_cookie) unless @current_user == false
end