Осуществление «Запомнить меня» в приложении Rails

голоса
46

Моя 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).

Задан 02/08/2008 в 13:56
источник пользователем
На других языках...                            


8 ответов

голоса
26

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

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

Таким образом, хотя вы должны:

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

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

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

Ответил 02/08/2008 в 17:10
источник пользователем

голоса
10

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

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

  • печенье Session установлено быть долгоживущими (6 месяцев или около того)
  • Внутри магазина сессии
    • «Истекает» дата, которая установлена ​​для входа + 24 часов
    • Идентификатор пользователя
    • Заверенные = правда, так что я могу позволить для анонимных пользователей sesssions (не опасно из-за печенья тампер защиты)
  • Добавить before_filter в контроллере приложения, который проверяет «истекает» часть сессии.

Когда пользователь проверяет «Remember Me» окно, я просто установить сеанс [: expireson] дата будет войти в систему + 2 недели. Никто не может украсть печенье и оставаться в системе навсегда или притвориться другим пользователем, потому что рельсы куки сессии является защищенным от повреждений.

Ответил 16/09/2008 в 22:37
источник пользователем

голоса
9

Я хотел бы предложить вам принять либо взглянуть на RESTful_Authentication подключить, который имеет реализацию этого, или просто переключить реализацию использовать RESTful Authentication_plugin. Существует хорошее объяснение о том, как использовать этот плагин в Railscasts на:

Railscasts # 67 restful_authentication

Вот ссылка на сам плагин

restful_authentication

Ответил 17/09/2008 в 15:17
источник пользователем

голоса
5

Restful_authentication плагин имеет хорошую реализацию этого:

http://agilewebdevelopment.com/plugins/restful_authentication

Ответил 06/08/2008 в 22:30
источник пользователем

голоса
3

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

Ответил 16/01/2011 в 05:26
источник пользователем

голоса
3

Обратите внимание, что вы не хотите, чтобы упорствовать свою сессию, только их идентичность. Вы создать новый сеанс для них, когда они возвращаются на ваш сайт. Как правило, вы просто присвоить GUID пользователя, пишет, что их печенье, а затем использовать его, чтобы посмотреть их, когда они вернутся. Не используйте свое имя пользователя или идентификатор пользователя для маркеров, как это легко может быть угадано и позволить лукавые посетителям угнать счета других пользователей.

Ответил 01/09/2008 в 22:46
источник пользователем

голоса
3

Это довольно хорошо рецензия одного ребят опыта создания 30-дневные постоянные сессий.

ПРЕДУПРЕЖДЕНИЕ: блог пост с 2006 года

http://grahamglass.blogs.com/main/2006/05/rails_sessionsr.html

Ответил 03/08/2008 в 02:53
источник пользователем

голоса
2

Это работает как шарм для меня:

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

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

Bascially, это так просто, как:

  1. в том числе один файл поставщика / плагины каталог
  2. сеансовые экспирации значение в контроллере приложения, используя только одну строку
Ответил 20/09/2008 в 09:58
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more