巷で流行りのRuby on Railsですが、いろいろGemというプラグインを追加することでただでさえ便利なRuby on Railsがどんどん便利になっていきます。

Deviseはログインとか認証処理を支援するgemです。ログインしたり、パスワード変更したりとかいう認証系の機能がないWebシステムって今となってはかなり少なくなってきているんじゃないかという気がします。近年FacebookやTwitterと連携できるOAuthとかが流行り始めてからは特に認証しなくてなんのシステムつくんの?とかそういうレベルになってきているんじゃないかと。

自分がRuby on Railsを始めてから、最初に使ったGemのDeviseについてのご紹介。

インストール

まずはRuby on Railsに読み込ませないことには話になりません。

Gemfileの中にgem 'devise'と記述してターミナルでbundle installを叩きます。これでdeviseがインストールされます。

設定

いろいろconfigファイルを作ったり、認証画面のひな形を作ったりしましょう。

まず、以下のコマンドを実行します。

<

pre class=”lang:zsh decode:true ” >
rails g devise:install

<

pre>

実行すると、設定ファイルができたあと、手順が出てくるのでその通りに設定します。

config/environments/***.rbの設定

config/environments/内の実行環境ごとのconfigファイルに以下のようにホストを登録します。

config.action_mailer.default_url_options = { host: 'localhost:3000' }

これはパスワードリセットする際、パスワードが送られるドメインになるんじゃないかな?(未確認)

デフォルトのままでとりあえず、動いてるので、必要になったら変えるくらいでいいかもしれません。

ルートURIの設定

config/routes.rbに以下のようにルートでアクセスされたときに表示する”Controller#action”を記述します。
これも直接的には関係ない気がする。

root to: "home#index"

エラーメッセージを記述

エラーメッセージを表示させる部分を以下のように記述します。

<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>

これもすぐにやらなきゃならないわけじゃないと思います。エラーメッセージ出せるよーくらいに思っておけば、あとあと、調べても全然問題ないでしょう。

Deviseのビューを作成

さて、ここからはやったほうがいいでしょうね。デフォルトのDeviseのログイン画面などのビューはお世辞にもおしゃれとは言えません。実用的な面を考えると、ビューをカスタマイズすることが必須だと思います。ここでは、Deviseのビューをカスタマイズするためにdeviseのviewのひな形を作成しています。

rails g devise:views

apps/views/devise/の中にビューができるのでこれをカスタマイズすれば機能そのままに好きなデザインのログイン画面を作れます。

Migrationファイルなどの生成

migrationファイル, modelファイルなどを作成するためのコマンドをたたきます。

rails g devise user

ここまでの作業で

rake routes

コマンドを実行して、new_user_sessionなどが生成されていればOKです。

基本的な使い方

ログイン中はcurrent_userでユーザ情報を取得できます。
また、user_signed_in?でログインしているかどうかを取得することができます。
例えば、

redirect_to new_user_session_path unless user_signed_in?

というコードはログインしていないときにアクセスされたら、ログインページにリダイレクトします。

まとめ

まとめると、他のGemと同様にGemfileにgem 'devise'と書いて、rails g devise:installしてやって、あとは出てくるメッセージにそって作業していけば認証システムが出来上がります。current_userは指定したモデル(デフォルトではUserモデル)のオブジェクトなので、current_userにメソッドを追加したければ、Userモデルに書いてやればOKです。

簡単にできる分、カスタマイズには慣れが必要そうですが、ちょっとずつ慣れていきたいとおもいます。