Подтвердить что ты не робот

Как установить файлы cookie при входе/выходе с помощью приложения

Я использую приложение Devise for rails 3. Для кэширования страниц мне нужно установить файлы cookie для входа/выхода информации.

Какой самый простой способ установить файлы cookie при входе/выходе с помощью Devise? Я читал "как настроить контроллер", но, похоже, это большая работа.

4b9b3361

Ответ 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