ねこものがたり

いちにちいっぽ

OmniAuthのTwitter認証でつまずいたこと

Twitter認証ってよく見るのに実装はこんなに難しいなんて・・・

と思ったので、引っかかったこととその対応をまとめておきます。

omniauth-twitterのgemを入れた後の話。 基本的なコードはOmniAuth: Overview · plataformatec/devise Wiki · GitHub に則っています。

Twitter側(settingタグ内情報)

Twitter Application Management ここから"Create New App"を押してアプリケーションを登録する。

f:id:neko314:20180429192342p:plain

f:id:neko314:20180429192140p:plain

①はhttp://172.0.0.1:3000 が良さそう。 でもここは無効な形式でなければダミーで良いらしく、全く違うのをいれても大丈夫だった。

②は①と同じでダミーでも登録できるけれど、callbackした時のURLを入力するといい。 何もなければroute infoで該当するのを入れておくと無難かもしれない。 f:id:neko314:20180429193414p:plain

③ここが一番盲点でした。 このチェックボックスは多分デフォルトで選択されているんですが、そのままだと動かした時にエラーが出てしまっていました。 詳しい仕組みはちょっとまだわかっていないのですが、サインインやサインアップ時には都度session情報などを含むリクエストを送るはずなので、その辺が関係あるのかな〜と推測。まあ、全然わかってないので的外れかも。

コード側(OmniauthCallbacksController)

冒頭で述べたとおり、deviseのwiki上にあるomniauthについての情報を元にコントローラーを書いていったのですが、そうすると”ActionDispatch::Cookies::CookieOverflow”というエラーが出ました。

そのため、コントローラーのコードを変更しました。

変更前

session["devise.twitter_data"] = request.env["omniauth.auth"]

変更後

session["devise.twitter_data"] = request.env["omniauth.auth"].except("extra")

その他

まだエラーが残っていて、これだけだとうまくいっていないのだけれど、また調べて解消したら備忘録としてまとめておきたいと思います。

参考サイト

twitter_oauthでOAuth::Unauthorized 401 Authorization Requiredとなる - hogashi.*

ActionDispatch::Cookies::CookieOverflow エラー | EasyRamble