2013-02-15 127 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