Лучшее, что можно сделать, это использовать то, что называется «Помни меня».Поскольку сессионный 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, которые будут сохраняться после перезапуска браузера.