2011-02-18 65 views
0

我希望rails在用戶通過omniauth(Twitter,Facebook或OpenID)完成成功登錄後更新或存儲評論。使用Rails的omniauth成功完成oauth登錄後保存評論對象

  1. A(未登錄)用戶填寫評論表單。帖子。
  2. 用戶可以獲取一個omniauth頁面,她可以選擇登錄方法:Twitter,Facebook或OpenID。
  3. 一旦用戶從oAuth成功返回,我想要存儲(或發佈)該評論。

我有這個工作,使用會話變量,但這不是非常線程安全的:它會打破,如果用戶有多個評論標籤打開相同的會話。

我應該將評論以未發佈的狀態保存到數據庫,並在返回後切換?如果是這樣,如何知道如何切換正確的評論?問題類似於上述會話問題。

有什麼方法可以簡單地將評論對象與omniauth一起傳遞,並在用戶從成功登錄返回時將其收回。

或者我可以傳遞一些散列字符串,我可以提取成功返回後?

編輯:完全重寫以簡化和澄清問題。

+0

你能解釋爲什麼它不適用於會話變量嗎?如果您的控制器從#create的會話變量中刪除了註釋信息,則其他打開的選項卡不應受到影響,對吧? – monocle

+0

如果您在會話中存儲評論C,則同時傳遞用戶登錄(其他選項卡)發佈評論D.從登錄過程返回後(在第一個選項卡中)評論C丟失並且存儲評論D. – berkes

回答

1

在會話中存儲帖子id以及評論文本。成功驗證後,使用存儲的ID查找帖子併爲其創建評論對象。

更新 - 如果認證失敗,刪除所有這些條目。

+0

實際上,Rails中會話的存儲量有多大? – berkes

+2

取決於你在哪裏存儲它。如果您將會話存儲在Cookie中(您不應該這樣做),它會受到Cookie的存儲限制(我猜是4KB)。但是,如果使用AR將會話存儲在數據庫中,那麼它幾乎是無限的。在這種情況下,只有session_id(會話表的主鍵)存儲在cookie中。 – Jagira