deviseで各種OAuthのSNSログイン実装 [Twitter,Facebook,Google,Yahoo!]

OAuthでの各種SNSログイン機能を、deviseを使ってるところに実装したので、それぞれ参考にした資料とかまとめておきます。

Twitter && Facebook

deviseを使っていれば、以下の記事に従えば簡単に実装できます!

qiita.com

Twitterでレスポンスのデータサイズが大きすぎてcookieに入りきらないエラーが出てしまった。

easyramble.com

レスポンスのうちextra以下の部分がめちゃくちゃ大きいのでそこを削れば入るようになります。nice!

ただ、TwitterのOAuthってemailアドレスもらえないんですね...。Userでvalidationをpresence: trueとかにしてるとつらい。

Google

gem 'omniauth-google-oauth2'があるので、こいつを使えば実装できます。

以下の記事が参考になりました。

qiita.com

結構はまりました...。

まず、

redirect uri mismatch

のエラー。

こちらはomniauth-oauth2のバージョンを下げて、omniauto-google-oauth2GitHubのmasterからfetchしてくるようにして対応しました。

# Gemfile
gem 'omniauth-oauth2', '~> 1.3.1'
gem "omniauth-google-oauth2", git: 'https://github.com/zquestz/omniauth-google-oauth2', branch: 'master'

参考: OmniAuth OAuth2 1.4.0 以降で `Invalid Credentials` エラー - Qiita

次に、

invalid credentials

みたいなエラーで止まったのは、GoogleOAuth認証に必要なAPIが有効になってないからでした。

Google+とContactsのAPIを有効にしたらいけるようになりました。

あとたぶんlocalhostでやってるなら127.0.0.1にしちゃダメです。

Yahoo!

やはり、そこまでネットを普段使ってない層がユーザになる場合は、Yahoo!はまだ外せないと思います。

以下の記事が良さそうでした。

mikanmarusan.hatenablog.com

中の方が作ってるgemなのでよいのではないでしょうか。

github.com

おわり

わりとはまりました。。

テスト書かなくては