ruby on rails - это - Реализация «Запомнить меня» в приложении Rails




установка rails (6)

Вы почти наверняка не должны продлевать сеансовый cookie-файл для продления срока его службы.

Хотя эта статья не имеет отношения к рельсам, она в некоторой степени объясняет лучшие практики «помни меня».

В итоге, хотя вы должны:

  • Добавьте дополнительный столбец в пользовательскую таблицу, чтобы принять большое случайное значение
  • Установите долгоживущий cookie на клиенте, который объединяет идентификатор пользователя и случайное значение
  • Когда начинается новый сеанс, проверьте наличие файла cookie id / value и подтвердите подлинность нового пользователя, если они совпадают.

Автор также рекомендует аннулировать случайное значение и сбрасывать cookie при каждом входе в систему. Лично мне это не нравится, так как вы не можете войти на сайт на двух компьютерах. Я хотел бы убедиться, что моя функция смены пароля также сбрасывает случайное значение, таким образом блокируя сеансы на других машинах.

В заключение, совет, который он дает относительно того, как сделать определенные функции (смена пароля, изменение адреса электронной почты и т. Д.) Недоступными для сеансов с автоматической аутентификацией, стоит того, чтобы их следовать, но редко встречаются в реальной жизни.

В моем Rails-приложении есть поле для входа с флажком «запомнить меня». Пользователи, установившие этот флажок, должны оставаться в системе даже после закрытия браузера. Я отслеживаю, вошли ли пользователи, сохранив их идентификатор в сеансе пользователя.

Но сеансы реализованы в Rails как сеансовые куки, которые не являются постоянными. Я могу сделать их настойчивыми:

class ApplicationController < ActionController::Base
  before_filter :update_session_expiration_date

  private

  def update_session_expiration_date
    options = ActionController::Base.session_options
    unless options[:session_expires]
      options[:session_expires] = 1.year.from_now
    end
  end
end

Но это похоже на взлом, что удивительно для такой общей функциональности. Есть ли лучший способ?

редактировать

Ответ Гарета довольно хороший, но мне все равно хотелось бы получить ответ от кого-то, знакомого с Rails 2 (из-за его уникального CookieSessionStore ).


Для меня это сработало:

http://squarewheel.wordpress.com/2007/11/03/session-cookie-expiration-time-in-rails/

Теперь мои сеансы CookieStore истекают через две недели, в результате чего пользователь должен снова ввести свои учетные данные для входа в систему в течение следующих двух недель.

По сути, это так просто, как:

  1. включая один файл в каталоге vendor / plugins
  2. установить значение истечения сеанса в контроллере приложения, используя только одну строку



Я бы пошел на Devise для блестящего решения для аутентификации для рельсов.


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

Вот что я сделал:

  • Сеансовый cookie-файл установлен на длительный срок (6 месяцев или около того)
  • Внутри магазина сессий
    • Дата окончания срока действия, установленная для входа в систему + 24 часа
    • Идентификатор пользователя
    • Authenticated = true, поэтому я могу разрешить анонимные сеансы пользователя (не опасно из-за защиты от несанкционированного доступа к файлам cookie)
  • Я добавляю before_filter в Application Controller, который проверяет часть сессии «expires on».

Когда пользователь устанавливает флажок «Запомнить меня», я просто устанавливаю дату сеанса [: expireson] равной логину + 2 недели. Никто не может украсть cookie-файл и оставаться в нем навсегда или маскироваться под другого пользователя, потому что cookie-файл сеанса rails защищен от несанкционированного доступа.





http