Как установить файлы cookie при входе/выходе с помощью приложения
Я использую приложение Devise for rails 3. Для кэширования страниц мне нужно установить файлы cookie для входа/выхода информации.
Какой самый простой способ установить файлы cookie при входе/выходе с помощью Devise? Я читал "как настроить контроллер", но, похоже, это большая работа.
Ответы
Ответ 1
На самом деле было бы не слишком сложно расширить программу SessionController для добавления файлов cookie при входе в систему и выхода из системы, вы можете создать контроллер, подобный этому:
# app/controllers/sessions_controller.rb
class SessionsController < Devise::SessionsController
# POST /resource/sign_in
def create
cookies[:sign_in] = "Sign in info you want to store"
super
end
# GET /resource/sign_out
def destroy
cookies[:sign_out] = "Sign out info you want to store"
super
end
end
Затем вам нужно добавить следующее к вашим маршрутам. rb:
devise_for :users, :controllers => { :sessions => "sessions" }
Это должно сделать вам большую часть пути.
Ответ 2
Так как Devise основан на Warden, другим решением является использование обратных вызовов Warden, например, в вашем devise.rb:
Warden::Manager.after_set_user do |user,auth,opts|
auth.cookies[:signed_in] = 1
end
Warden::Manager.before_logout do |user,auth,opts|
auth.cookies.delete :signed_in
end
Ответ 3
Адаптировано из @karl-rosaen, чтобы ответить на это решение, создайте новый инициализатор или добавьте в конец инициализатора devise.rb.
Это добавит куки файл, чтобы запомнить сообщение электронной почты, если помнить, что у меня установлены параметры, если он не удалит файл cookie
Warden::Manager.after_authentication do |user, auth, opts|
if user.remember_me
auth.cookies[:email] = {value: user.email, expires: 2.weeks.from_now}
else
auth.cookies.delete :email
end
end