2011-02-01 39 views
14

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

在Devise登录/登出时设置cookie的最简单方法是什么?我读过'如何定制控制器'部分,但它似乎是很多工作。

回答

12

它实际上也不会太硬,延长色器件SessionsController在加上日志饼干和注销,您可以创建一个类似的控制器:

# 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 

那么你就必须添加跟随您的routes.rb:

devise_for :users, :controllers => { :sessions => "sessions" } 

这应该让你在那里的大部分。

+0

我不得不复制会话/ new.html.haml。有用!谢谢。 – 2011-02-07 20:34:11

+0

您可以使用http://stackoverflow.com/questions/4301249/how-to-change-the-default-path-of-view-files-in-a-rails-3-controller中的解决方案来使用原始观点。 – 2011-03-06 17:20:41

18

由于设计是基于监狱长,另一个解决方案是使用监狱长的回调,例如,在你的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

摘自@卡尔 - rosaen回答这个问题的解决方案创建一个新的初始化或增加devise.rb初始化程序的结尾。

这将增加该cookie,如果还记得我的选项设置为记住电子邮件,如果没有它会删除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