2012-10-11 53 views
3

我正在對Radiant CMS/Ruby on Rails應用程序進行一些相當廣泛的更改 - 升級到Radiant 1. *以及許多gem更改 - 以及過程中,我們已經開始在維護用戶會話方面遇到問題。普通調用工作正常,但任何進入的AJAX調用都找不到用戶的活動會話並創建一個新會話。Ajax調用丟失會話 - Ruby on Rails/Radiant CMS站點

我們正在使用cookie存儲,因此可能會出現問題,但我不確定在哪裏尋找。檢查請求標頭,看起來會話cookie正在通過AJAX調用的Cookie標頭傳遞。對於這兩種類型的請求,cookie標頭中傳遞的內容看起來都是相同的。但是,在控制器中獲取會話變量時,會爲ajax調用創建新會話,而不是爲標準http調用創建會話。

任何想法可能會發生什麼,或者我應該看看調試發生了什麼?

+1

的XHR調用需要的CSRF令牌的更多信息: HTTP ://stackoverflow.com/questions/8511695/rails-render-json-session-lost – Mars

回答

3

問題很可能是安全令牌在Ajax調用中沒有傳遞,這導致授權gem註銷用戶。這是一種能夠在所有的Ajax通過安全令牌進行調用透明:

應用程序/視圖/佈局/ application.html.erb

<!DOCTYPE html> 
<html> 
    <head> 
    <%= csrf_meta_tags %> 
    (...) 

的jQuery的UJS寶石然後添加到您的Gemfile :

的Gemfile

gem "jquery-ujs" 

而此行到您的應用程序JAV jQuery的線下ascript文件:

應用程序/資產/ application.js中

//= require jquery-ujs 

這裏是關於jquery-ujs gem