Я использую текущую версию restful_authentication, найденную на github, и у меня куча странных сессионных проблем. Сервер, похоже, каким-то образом назначает сессии пользователям, чего не должно быть. Это происходит только при пересечении барьера, в котором произошел выход из системы.
Вот пример. Когда на сервере нет активных сеансов, я захожу в учетную запись с пользователем A. На другом компьютере я захожу с пользователем B. Затем при выходе из пользователя B, через некоторое время после перенаправления выхода из системы, я войду в систему как пользователь A. С этого момента я могу продолжать перемещаться по сайту, как если бы я вошел как этот пользователь! Что-то, что я наблюдал через журналы, это то, что когда происходит этот захват, идентификаторы сессии не совпадают. Пользователь A вошел в оба сеанса, но идентификаторы сеанса совершенно разные. Это только один пример того, что может произойти. Я не могу воспроизвести проблему надежно, так как она кажется случайной.
Похоже, это не симптом среды или сервера, на котором он работает. Я могу воспроизвести проблему, используя как дворняжку, так и пассажира. Я также видел это в разработке и производстве. Я использую сеансы на основе БД в этом приложении, и оно работает на Rails 2.1.1. Я применил параметр Stateful при вызове генератора. В противном случае не было сделано никаких других изменений в способе обработки сеансов.
Обновление
Вот неправильный метод, полученный непосредственно из 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