読者です 読者をやめる 読者になる 読者になる

Make Healthy Life

最近はSQLばっかり書いてるWebエンジニアの日記です。

ユーザー認証には黙ってdevise使っとけ、という話

Ruby on Railsに限らず、Webアプリ作ろうと思ったら、ユーザー登録・認証を作らなくてはならない。もちろんそんなの必要ないアプリ作るのもアリだけど。
僕もこのユーザー登録・認証をRuby on Railsで実装したら、かなり迷った。
deviseを使えばいけるんだけども、世の中にはFacebook認証と、独自認証どちらでも登録できるようにしたいとか、Facebook認証とtwitter認証で認証してきたユーザーがいたらどうするんだ?とかいろいろ考えてる人がいるらしく、これぞ認証の決定版!みたいなのがまだないみたい。というかアプリの要件によって変わるから仕方ないのかな。

迷った経緯を書いておきます。

Facebook認証とかにしたら楽にできるんじゃね?期

Facebook認証とかよく見るし、絶対だれかgem作ってるよな〜と思って調べてみた。
僕の検索の仕方が悪かったのと、中途半端に英語が読めるので以下記事を参考に実装してみた。
Rails 4 OmniAuth using Devise with Twitter, Facebook and Linkedin

ほうほう、devise, omniauthというgemを使えばいけるのか〜ぐらいで、チュートリアルやるみたいに写経してみた。
が、写経終わってみてviewはどう書くの?結局deviseって何してるの?とか疑問が湧きまくってしまった。しかもよく読むと、これはFacebook認証とtwitter認証で違うメールアドレスで認証してきたユーザーにどう対処するか?という主旨の実装方法らしく、結構複雑な感じらしい。
レベル高いことに挫折し、googleをさまよう。

日本語の記事あるじゃん!期

ちゃんと検索したら、日本語の記事あった!

Rails4 で Devise と OmniAuth で、Twitter/Facebook のOAuth認証と通常フォームでの認証を併用して実装 | EasyRamble

でもこっちもFacebook認証と独自認証を併用させてるんですね。
出来そうな気もしたけどもうFacebook認証よそうかなぁと思い始める。

独自認証だけでいいや!期

もうシンプルなユーザー登録でいいや!と開き直り、RailsCastの認証を実装してみた。フルスクラッチ
#250 Authentication from Scratch - RailsCasts

この辺はRailsチュートリアルでやっていたので、ああ、そうそうこんな感じだよね〜という気分だった。
ログイン画面を実装し終えた時点で、いろんな機能が足りないことに気づく。
ログインユーザーの取得とか、ログインしているか否かの判定、などなど。

deviseってシンプルなユーザー登録のgemだったんだね。。。期

Facebook認証とかにしたら楽にできるんじゃね?期ではomniauthに気を取られて気づかなかったが、deviseってシンプルなユーザー認証・登録の仕組みを提供してくれるgemだったんだね。
とりあえずこれを入れておけばユーザー登録もできるし、ログインユーザーの取得もできるし、大体できるんだね。
とてもショック。
でもとても便利!便利です。


ここまでくるのに丸2日かかった。まだrubyになれてなくて=~の意味とか調べながらやったからというのもあるけど、もっと早い段階で気づきたかったというのが本音。
初めてのことをやるときは仕方ないのかな。めげずに頑張ります。