2013-11-26 58 views
0

我爲Sinatra創建了一個簡單身份驗證,但會話對象似乎正在清除所有自定義密鑰。例如,當用戶登錄時:會話數據未保存在Sinatra簡單身份驗證中

session[:user_id] = current_user.id 

這實際上存儲在當前請求的會話對象中。當發生新的請求時,會話[:user_id]不再存在。會話處於活動狀態,cookie已啓用。我嘗試了所有我無法弄清楚的問題(這裏是所有相關的代碼:https://gist.github.com/ksiomelo/7656296)。

應用:

use Rack::Session::Cookie , :secret => "82e042cd6fde2bf1764f777236db799e" 

enable :sessions # for flash messages 

助手:

def require_auth 
    unless session[:user_id] 
    flash[:error] = "You need to be logged in." 
    redirect to("/login") 
    end 
end 

def current_user 
    @current_user ||= User.find_by_id(session[:user_id]) if session[:user_id] 
end 

登入:

authorized_user = User.authenticate(params[:email],params[:password]) 
     if authorized_user 
     # update session/redirect 
     session[:user_id] = authorized_user.mongo_id.to_s 
     session.options[:expire_after] = 2592000 unless params[:remember].nil? # 30 days 

     # redirect to the wizard 
     flash[:info] = "Welcome back #{authorized_user.first_name}" 
     redirect to("/home") 
+0

嘗試爲會話處理設置提供者, g .:'使用Rack :: Session :: Pool,:expire_after => 2592000' – mudasobwa

+0

顯然工作,我錯過了在文檔中。發佈這個解決方案,我會接受它!謝謝! – ksiomelo

回答

1

你應該可能嘗試設置會話處理,電子供應商。 g .:

use Rack::Session::Pool, :expire_after => 2592000 

很高興幫助。