restful_authenticationの導入

restful_authenticationとは、Rails用のユーザ認証プラグインのことです。
Rails2.0以降は、このプラグインが大勢のようです。
今後、少し使いそうだったので、試してみました。

Railsレシピブック 183の技

Railsレシピブック 183の技

Railsレシピ本では、153項で紹介されています。
でも、正直そこでは中途半端にしか紹介されていなかったので、他に調べてみました。

プラグインのインストール

プラグインはアプリケーションごとに導入します。
導入したいアプリケーションのルートディレクトリで以下を実行

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

認証用のコントローラやライブラリを生成

$ruby script/generate authenticated user sessions

テーブルの用意

ユーザ情報を格納するテーブルを作ります。

$ruby rake db:migrate

ルーティングの設定

ログイン・ログアウトなどを手軽に使えるよう、config/routes.rbを編集します。

ActionController::Routing::Routes.draw do |map|

  #以下5行を追加
  map.resources :users
  map.resource  :session
  map.signup '/signup', :controller => 'users', :action => 'new'
  map.login  '/login', :controller => 'sessions', :action => 'new'
  map.logout '/logout', :controller => 'sessions', :action => 'destroy'
end

ここまでは、レシピ本にも載っています。

ちなみに、このルーティングで、それぞれのURLは例えば以下のようになります。

ユーザ登録 http://localhost:3000/signup
ログイン http://localhost:3000/login
ログアウト http://localhost:3000/logout

コントローラの設定

次に、認証機能をコントローラ全体に適用させます。
まず、「app/controllers/session_controller.rb」と「app/controllers/users_controller.rb」にある「include AuthenticatedSystem」の行をカットまたはコメントアウトします。両方とも削らないとうまくいきませんでした。

class UsersController < ApplicationController
  # Be sure to include AuthenticationSystem in Application Controller instead
  include AuthenticatedSystem
class SessionsController < ApplicationController
  # Be sure to include AuthenticationSystem in Application Controller instead
  include AuthenticatedSystem

そして、そのコードを「app/controllers/application_controller.rb」に追加します。

class ApplicationController < ActionController::Base
  # include AuthenticatedSystemのコードを追加
  include AuthenticatedSystem

これで認証機能を、アプリケーション全体で使うことができます。
詳しくは下の所などで紹介されていました。

restful_authentication
http://rektunpe.sakura.ne.jp/diary/?date=20071222

restful_authenticationを触ってみた
http://d.hatena.ne.jp/idesaku/20080430/1209579996

restful_authenticationプラグイン
http://d.hatena.ne.jp/tsimo/20080323/1206277929#c

認証のフィルタの設定

最後に認証が必要なコントローラに、アクションにアクセスする前に認証するように設定します。
例として、app/controllers/hoge_controller.rbに設定をします。

class HogeController < ApplicationController
  # before_filter :login_requiredのコードを追加
  before_filter :login_required

これでこのアクションのページを見る前に認証が必要になります。
一応全部のコントローラに加えておくといいと思います。


このように認証機能の核はできましたが、実用にはもう少しカスタマイズする必要がありそうです。

発展的な使い方

自分のためにもここにメモしておきます。
余裕があれば、ここまで実装してみたいです。

railsforumのrestful_authenticationは素晴らしい!それを見てRESTfulの理解も深まる
http://d.hatena.ne.jp/zariganitosh/20080803/1217836912

以下のような機能が紹介されています。

  • メールによるアクティベーション
  • パスワード忘れの処理
  • ユーザー情報の編集
  • アクセス権による制限
  • administrator権限によるユーザー管理
  • OpenIDによるログイン
同じくメールによるアクティベーションについて

Restful Authentication with rails 2
http://www.avnetlabs.com/rails/restful-authentication-with-rails-2

restful authentication plugin
http://d.hatena.ne.jp/cuspos/20080725


結局RESTfulが何なのかわかりませんでした。聞いたことはあったのですが。
時間があれば、勉強してみたいです。