2011-02-18 15 views
0

ユーザが成功したログトラフomniauth(Twitter、FacebookまたはOpenID)を実行した後に、レールにコメントを更新または保存します。Railsのomniauthで正常にoauthログインした後にCommentオブジェクトを保存する

  1. (ログインしていない)ユーザーがコメントフォームに記入します。それを投稿する。
  2. ユーザーは、Twitter、Facebook、OpenIDなどのサインイン方法を選択できるオムニバスページを取得します。
  3. ユーザーがoAuthから正常に戻ると、コメントを保存(または公開)します。

これはセッション変数を使用して動作しますが、スレッドセーフではありません。ユーザーが同じセッションで複数のコメントタブを開いている場合は破損します。

コメントを非公開の状態でデータベースに保存し、返された後にそれを切り替える必要がありますか?もしそうなら、正しいコメントをどのように切り替えるかを知る方法は?問題は上記のセッション問題と同様です。

omniauthと一緒にコメントオブジェクトを渡して、ユーザーが成功したサインインから返されたときに戻ってくる方法がありますか?

または、成功したリターンの後に抽出できるハッシュ文字列を渡すことはできますか?

編集:質問を簡略化して明確にするために完全に書き換えます。

+0

なぜセッション変数で動作しないのか説明できますか?コントローラが#createのセッション変数からコメント情報を削除した場合、他の開いているタブには影響しませんか? – monocle

+0

セッションにコメントCを保存すると、ユーザーは同時にログインします(他のタブ)POSTコメントDログインプロシージャ(最初のタブ)から戻ると、コメントCが失われてコメントDが保存されます。 – berkes

答えて

1

セッションのコメントテキストとともに投稿IDを格納します。認証に成功すると、格納されているIDを使用して投稿を見つけ、コメントオブジェクトを構築します。

更新 - 認証が失敗した場合は、すべてのエントリを削除してください。

+0

実際にRailsのセッションの記憶容量はどれくらいですか? – berkes

+2

保管場所によって異なります。あなたがクッキーにセッションを保存している場合(そうすべきではありません)、それはクッキーの保存制限(4KBと思われます)によって制限されます。しかし、ARを使用してデータベースにセッションを保存すると、ほとんど無制限になります。この場合、session_id(セッションテーブルの主キー)のみがcookieに格納されます。 – Jagira

関連する問題