ユーザー認証には黙って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になれてなくて=~の意味とか調べながらやったからというのもあるけど、もっと早い段階で気づきたかったというのが本音。
初めてのことをやるときは仕方ないのかな。めげずに頑張ります。