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を見ればわかる。