もふもふ技術部

Ruby on Rails, Deviseを使って認証機能を実装してみる


手順はDevise開発元のGitHubに書いてある。英語だけどコマンドとかコード読めば大体できる
https://github.com/plataformatec/devise

日本語が良いかたはこっちを読むがいいさ!
http://d.hatena.ne.jp/babie/20100729/1280381392

環境

  • Mac OS X 10.7.5 Lion
  • ruby 1.9.3
  • Rails 3.2.12
  • mysql 5.1.66

やってみる。百聞は一見にしかず

GemFileに下記を追加してbundle installする。ちなみにGemFileはプロジェクトルートに配置されている。

またしてもinstall、この辺はどうも不慣れだ。Deviseの実行準備でもしてるんだと思っておこう。実行するとこんなん出た。まだセットアップ終わってないよ!っということなのかな?軽く受け流して先に進んでみる。

続いてはModelクラスを生成するコマンド。なんか生成された模様、次へ。

下記をAppControllerに追加する。これで自動的に認証済かどうかを判断するのだろう。たったの一行だ。

ここまででひとまず画面を動かしてみる。やっぱり怒られた。devise_forメソッドがないよ?とのこと。

サーバを再起動しろという情報をどこかで見つけたので、script/rails serverを再起動。今度は別の理由で怒られる。あっそうか、Model生成したときにmigrateファイルも生成されたけどmigrate:dbやってたなかった。

というわけでこれ。

おけ。これで画面が開くようになった。

devise_001

次はmysqlでusersテーブルを確認。こんなんが生成されてた。他の独自項目はmigrateで追加すればいいのかなきっと。

Email:test@example.com
Password:password
でsignupしてみると、無事に内部の画面へ遷移。

再びmysqlでusersテーブルを確認。ちゃんとデータが登録されて暗号化パスワードが保存されてる。

ちょっと動作確認。
localhostのcookieを削除してSessionを破棄して内部のページにリクエストする。要するにログアウトしている状態。ちゃんとログイン画面に飛ばされた。ほとんど何も考えずここまでできるとは至れり尽くせりってやつだ!

Signup(登録機能)も、パスワードリセット機能も最初から出来上がってる。イケメンすぎる!恐るべし、Rails。

つけたし

ログインしているユーザー情報にアクセスしたい場合があると思う。ちょっと例をあげておこう。
例えばログイン状態をチェック。

viewでこんな感じで使える

devise_004

あとはroutes.rbでルーティングを変更するなり、before_filterをつけるControllerを変更するなり、Usersのmigrateファイルを変更するなりで調整すればいい。実に簡単だ!

The following two tabs change content below.
原田 敦

原田 敦

日本CAWのエンジニア。もふもふ部の部長。得意分野はRuby on Railsを使った小規模WEBアプリケーションを高速で開発すること。週末の楽しみは一人お菓子パーティー。三度の飯より小動物をもふもふするのが好きです。