2013-02-15 144 views
1

我想实现记住我选择基于我继承的代码登录。Rails会话管理

我有以下几点:

def login 
if request.post? 
    if params[:remember_me] 
    # this is where user checked the remember me box 
    cookies[:login] = { :value => "XJ12", :expires => Time.now + 120} 
    end 

    session_user = User.authenticate(params[:user][:email], params[:user][:password]) 
    if session_user 

     session[:user] = session_user.id 
     @user=User.find(session[:user]) 
     @user.update_attributes(:last_login_time => Time.now(),:is_logged => true) 
     @user.save 
     flash[:message] = "Login successful." 
     redirect_to "/admin" 
    else 
     flash[:warning] = "Your email or password is incorrect. Please re-enter." 
    end 
    end 
end 

不管我做什么,cookie将被自动设定(到期日:会议)。我想如果用户没有选择记住我的选项,我将cookie设置为10分钟。如果他选择记住我,那么我会设置更长的时间。 我可以得到一些指导,做什么?

回答

1

首先,Time.now + 120从现在开始只有2分钟,您应该将它设置为稍后的值。

然后,这里可以成为你的流程:

  1. 当试图获取用户,请检查是否设置cookie(我建议你为每个用户创建一个唯一的随机字符串,因为Cookie可以被修改客户端)
  2. 如果Cookie设置,登录相应的用户
  3. 如果不是,从会议
  4. 尝试基本日志连接时,登记的cookie,如果用户选中该复选框
+0

:使用active_record_store。这里的问题是我使用cookie做的任何事情,会话仍然被写为cookie。我应该使用cookie_store吗? – 2013-02-15 08:59:30

+0

是的,会话将写入一个名为_your_app_name_session的签名cookie中,但这是完全安全的。正确使用会话[]来检索它。 – Intrepidd 2013-02-15 09:00:53

+0

我恢复为cookie_store。现在我需要将会话过期设置为10分钟,如果记住我没有点击。怎么样? – 2013-02-15 10:27:32