- 更新日: 2013年12月10日
- Devise
ActionDispatch::Cookies::CookieOverflow エラー
Rails4 の Devise + OmniAuth で表題のエラーが発生しましたので対処。Devise + OmniAuth で Twitter での OAuth 認証によるサインイン機能を作っていたところ、「ActionDispatch::Cookies::CookieOverflow」のエラーが発生しました。
Twitter からのレスポンスデータが大きいのが原因
原因を調べたところ、OAuth 認証で、Twitter が返すレスポンスデータの extra section のデータが大きすぎるためであるらしい。
ruby on rails – Devise for Twitter, Cookie Overflow error? – Stack Overflow
解決策をググってみたのですけど、セッションの保存先を Cookie から ActiveRecord に変更する方法を解説しているページが多かった。
セッションにあまり大きなデータを格納するのも気持ち悪い気がしたので、この stackoverflow に書いてあった方法で extra はセッションに格納しないようにしました。
OAuth 認証用のコールバックメソッド
以下、Devise + OmniAuth を使った OAuth 認証用のコールバックメソッド。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController def twitter # You need to implement the method below in your model @user = User.find_for_twitter_oauth(request.env["omniauth.auth"], current_user) if @user.persisted? set_flash_message(:notice, :success, :kind => "Twitter") if is_navigational_format? sign_in_and_redirect @user, :event => :authentication else session["devise.twitter_data"] = request.env["omniauth.auth"].except("extra") redirect_to new_user_registration_url end end end |
コードは、https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview を参考。
session[“devise.twitter_data”] = request.env[“omniauth.auth”].except(“extra”) の行で、request.env[“omniauth.auth”].except(“extra”) としてセッションに格納する、Twitterからのレスポンスのうち extra の部分を除外しました。以上で、ActionDispatch::Cookies::CookieOverflow のエラーは解決。
またも stackoverflow に助けられました。英語学習のおかげで、英文をある程度すらすら読めるようになり、stackoverflow を楽に活用できるようになったのは何気に大きいです。
ActiveRecord を保存先に指定する方法などは以下を参照。
- – 参考リンク –
- Cookie overflow in rails application? – Stack Overflow
- ActionDispatch::Cookies::CookieOverflow | 田村倉庫
- Rails `ActionDispatch::Cookies::CookieOverflowエラー – よしそぶろぐ
- Devise の関連記事
- RailsのDevise認証機能での実装チェックリストまとめ
- Deviseで送信されるメールのfrom(送信者メールアドレス)を変更
- Facebook の OAuth 認証で OAuthException(191)エラー
- Rails Devise でパスワードリセットなどのメールテンプレート(Mailer ビュー)をカスタマイズ
- Rails + Devise 環境でのフレンドリーフォワーディング機能を修正
- Deviseでユーザー登録完了時にウェルカムメールを送信する
- Rails Devise でユーザーがプロフィール情報を更新後に元のページにリダイレクトさせる
- Devise でユーザーがパスワードなしでアカウント情報を変更するのを許可
- Rails Deviseの日本語化辞書ファイル(devise.ja.yml)
- Rails + Devise で admin ユーザー(管理者)を削除できないようにする
Leave Your Message!