Самый простой способ сохранения сеансов Rails между перезапусками браузера - PullRequest
4 голосов
/ 19 февраля 2011

Какой самый простой способ реализовать файлы cookie, чтобы сеанс сохранялся между перезапусками браузера?

Ответы [ 3 ]

5 голосов
/ 19 февраля 2011

Лучшее, что можно сделать, это использовать то, что называется «Помни меня».Поскольку сессионный cookie не сохраняется между перезапусками браузера, вам нужно использовать другой вид cookie, который указывает вашему приложению, что пользователь является тем, кем они себя называют.Чаще всего функциональность запомнить меня реализуется, когда пользователь выбирает то, что он хотел бы, чтобы приложение запомнило.Затем происходит то, что вам нужно создать cookie, который будет действовать как пароль для этого пользователя.Обычно вы хотите сделать следующее:

  • Выберите атрибут, связанный с пользователем, к которому пользователь не может получить доступ или просмотреть.Например, время создания их учетной записи или какая-то случайно сгенерированная строка, которую вы храните для них.
  • Хешируйте этот атрибут, чтобы значение cookie не распознавалось.

Вот пример:

identifier = current_user.id
value = Digest::SHA1.hexdigest(current_user.created_at)[6,10]

cookies['remember_me_id'] = {:value => identifier, :expires => 30.days.from_now}
cookies['remember_me_key'] = {:value => value, :expires => 30.days.from_now}

Наконец, когда вы проверяете, вошли ли пользователи, вам также необходимо проверить, вошли ли они с помощью файла cookie cookie.Например:

def current_user
  current_user ||= login_from_session || login_from_cookie
end

def login_from_session
  current_user = User.find(session[:id]) unless session[:id].nil?
end

def login_from_cookie
  user = User.find(cookies['remember_me_id'])
  if cookies['remember_me_key'] == Digest::SHA1.hexdigest(user.created_at)[6,10]
    current_user = user
  else
    nil
  end
end

Это должно помочь вам начать работу с файлами cookie, которые будут сохраняться после перезапуска браузера.

4 голосов
/ 19 февраля 2011

Если вы хотите, чтобы ваш файл cookie длился вечно, вы можете сделать:

cookies.permanent[:foo] = "bar"

См. Документацию по файлам cookie на http://api.rubyonrails.org/classes/ActionDispatch/Cookies.html

1 голос
/ 07 августа 2011

http://railscasts.com/episodes/274-remember-me-reset-password?view=comments

Вот отличная заставка Райана Бейтса «Помни меня!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...