如何使用Devise登录/注销时设置cookie

Sam*_*ong 16 ruby-on-rails devise

我正在使用Devise for rails 3应用程序.对于页面缓存,我需要为登录/注销信息设置cookie.

使用Devise登录/注销时设置cookie的最简单方法是什么?我读了"如何自定义控制器"部分,但它似乎是很多工作.

Kar*_*aen 21

由于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
Run Code Online (Sandbox Code Playgroud)

  • 不再支持@karlrosaen~`auth.cookies` (4认同)

Bra*_*ker 13

实际上扩展设备SessionsController以在登录和注销时添加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
Run Code Online (Sandbox Code Playgroud)

然后你必须将以下内容添加到routes.rb:

devise_for :users, :controllers => { :sessions => "sessions" }
Run Code Online (Sandbox Code Playgroud)

这应该会让你在那里大部分时间.