devise

2010年9月13日

DeviseはWardenに基づくRailsのフレキシブルな認証プラグインです。
特徴は

  • Rackベース
  • Railsエンジンに基づく完全なMVC
  • 複数ロール(複数テーブル)が可能
  • モジュール方式概念に基づいている

ホームページ

インストール

Gemfileに

gem 'devise', :require => 'devise'

を追加して

bundle install

実行

使い方

deviseを使用するために必要な最低限のファイルをインストールする

rails generate devise:install

モデルを作成する

rails generate devise User

マイグレーション実行

rake db:migrate

Homeコントローラを追加(トップページのつもり)

rails g controller Home index

home_controller.rbにログイン用のbefore_filter追加

このbefore_filterの追加で、HomeControllerへのアクセスはすべてユーザのみ可能となる。もしユーザでない場合、ログイン画面に転送される。
#app/controller/home_controller.rb 

class HomeController < ApplicationController
  before_filter :authenticate_user!

  def index
  end

end

※ここのauthenticate_user!のuserは、rails generate deviseで追加したモデル名
それによって、ロール(モデル)分けが出来るみたい

routes.rbの修正

HomeControllerのindexをルート指定する
#config/routes.rb
に以下を追加 

root :to => 'home#index'

不要なファイルを削除

#public/index.html
このファイルを削除
このファイルがあると、routes.rbにroot設定したものが呼び出されない

サーバの起動

rails s

http://localhost:3000にアクセス

http://localhost:3000/にアクセスすれば、ログイン画面が表示される
この画面が気に入らなければ、ビューをカスタマイズすることが出来る

ビューのカスタマイズ

rails g devise:views

これで
#app/views/devise の配下にカスタマイズ用のビューが作成される
ビューだけのカスタマイズでは対応出来ない場合、コントローラもカスタマイズ出来る

deviseで使用する項目やメッセージの日本語化

#config/locales/devise.en.yml
このファイルをコピーしてdevise.jp.ymlにする。
ファイルを開き、3行目あたりのen:という所をjp:に変更。
各項目を日本語化する

コントローラのカスタマイズ

#app/controller/SessionsController.rbファイルを作成し
以下のようにクラスを継承します 

class SessionsController < Devise::SessionsController
end

app/views/devise/sessions というディレクトリを app/views/sessionsに移動する。

routes.rbにカスタマイズしたコントローラを使うように設定を追加

devise_for :users, :controllers => { :sessions => "sessions" }