2012-06-21 70 views
0

我最近創建了一種更改當前用戶密碼的方式,但是在保存記錄後,我的UserSession.find返回nil,我嘗試寫入UserSession.new({...})保存沒有運氣,關於如何解決這個問題的任何建議?UserSession.find在更改密碼後返回nil

這是通過一個AJAX請求運行(這是UserSessionController下的方法)我的代碼,請注意:

高清

change_my_password 
    #print "--------------RECORD: #{current_user_session.record.as_json}-------- #{current_user_session.user.as_json}" 
    user = current_user 
    user_email = user.email 
    user_remember_me = user.remember_created_at 
    response = { 
     :success => false, 
     :message_code => Extjs::MessageCodes::ERROR, 
     :message => 'Si è verificato un errore', 
     :total => 0, 
     :root => [] 
    } 
    if user.valid_password?(params[:old_password], true) 
     user.password = params[:new_password] 
     user.password_confirmation = params[:confirm_password] 
     response[:message] = 'La nuova password e la conferma non coincidono o sono troppo brevi' 
     if user.save 
     response[:success] = true 
     response[:message_code] = Extjs::MessageCodes::SUCCESS 
     response[:message] = 'Password modificata con successo' 
     end 
    else 
     response[:message] = 'La password precedente non coincide con quella attualmente in uso' 
    end 

    respond_to do |format| 
     format.extjson { render :json => response } 
    end 
    end 
+0

'record.save'只返回true或false以表示記錄是否被保存。因此'@ user_session'不會保存你新創建的記錄。 – krichard

+0

@KaiKönig:對不起,我沒有得到這個:是不是記錄我的用戶模型記錄?保存實際上返回true,所以它應該改變數據庫上的數據(並且爲了後續的登錄/註銷,密碼實際上已經改變)。有關如何以某種方式重新生成會話的任何建議? –

+0

什麼時候'UserSession.find'返回nil?在隨後的調用中? –

回答

0

其實我沒有找到一個解決這個問題:我通過在更改密碼後再次強制登錄來解決問題(甚至增加了安全性,所以不是那麼糟糕)。

我認爲KandadaBoggu對他的回答是正確的,但我測試了他們,他們都不適合我。

也許這是由我的代碼中的錯誤產生的問題,我真的不知道。 目前我只是將其視爲解決方案,因爲它實際上適用於我的軟件。

如果找到更好的答案,我很樂意將其標記出來。

感謝大家。

3

確保已不是maintain_sessions參數設置爲false ,即:

acts_as_authentic do |c| 
    c.maintain_sessions = false # change this to true. 
end 

OR

更新會話手動保存後:

user.send(:update_sessions) 

OR

重新創建會話後保存:

UserSession.create(user) 
+0

我正在測試他們,但似乎他們沒有解決問題:UserSession.create我認爲它以某種方式破壞我的會話,事實上下一次我稱它爲我得到user = nil。 user.send(:update_sessions)的情況相同,且maintain_sessions顯式設置爲true(在我的配置中通常不設置),即使在第一次調用時用戶也是零,不知道爲什麼。我想我處於一個不好的情況:\ –

+1

看看這個提示的提示:http://stackoverflow.com/a/4075733/163203 –

+0

試圖以這種方式,它不工作。請注意,我的第一次登錄是通過AJAX發生的,也許這會造成一些問題? –