restful_authenticationプラグイン

Ruby-1.8.6, Rails-2.0.2でアプリで使えるユーザ認証の手段を探していてrestful_authenticationプラグインというものを見つけた。使い方を紹介してくれている動画があって、その通りにやったらあっさり使えた。
で、メモ。

インストール

 $ script/plugin source http://svn.techno-weenie.net/projects/plugins/
 $ script/plugin install restful_authentication

ユーザとセッション管理用クラスの生成

 $ script/generate authenticated user session

ルーティングの設定

config/route.rbに次の行を追加

 map.resources :users
 map.resource :session  # map.resource :session, :controller => 'session'としないとだめかも
 map.signup '/signup', :controller => 'users', :action => 'new'
 map.login '/login', :controller => 'session', :action => 'new'
 map.logout '/logout', :controller => 'session', :action => 'destroy'

ユーザ管理用テーブルの作成

db/migration以下にユーザ管理用テーブルを作成するクラスが追加されているので、そのままドン。

 $ rake db:migrate

すべてのコントローラから認証機能を利用できるようにファイルを修正

app/controllers/application_controller.rbに一行追加する

 class ApplicationController < ActionController::Base
   include AuthenticatedSystem  # 追加

app/controllers/session_controller.rbとapp/controllers/users_controller.rbに含まれる'include AuthenticatedSystem'は削除しておく。


以上で準備は終わり。

  • (アプリのルートURL)/signupが新規ユーザ登録ページ
  • (アプリのルートURL)/loginがログインページ

となっている。
ログインページで認証が成功したときに移動するページはSessionController#createメソッドの中のリダイレクト先次第。

認証なしでのアクセスを防ぐ

コントローラのクラス定義の冒頭に

 class HogeController
   before_filter :login_required  # 追加
   ...
 end

と書いておけば、ログイン済みでなければそのクラスのアクションを実行できないようになる。


その他の利用可能なメソッドはlib/authenticated_system.rbを見ればわかる。