シリーズ:Acts as Authenticated その壱
今回はユーザ認証機能とサインアップ機能の追加とちょっとしたノウハウの説明です。
まず、インストールです。
./script/plugin install http://svn.techno-weenie.net/projects/plugins/acts_as_authenticated
でインストールされます。これはジェネレータ形式のプラグインです。
./script/generate authenticated user account
以上でuserモデルとmigrationファイルが作成されます。
また、accountコントローラ、テストのファイル、lib/のディレクトリに
ライブラリが入ります。
accountコントローラには
include AuthenticatedSystem
の部分があります。これをapplication_controller.rbに移動してください。
認証が必要なコントローラに以下のように追加します。
before_filter :login_required
特定のアクションにだけかけたいときは
before_filter :login_required, :only => [ :edit, :update]
のように書きます。
特定のサブクラスを飛ばしたい場合は
skip_before_filter :login_required
をそのクラスに書きます。
※注意
application_controller.rbにbefore_filter :login_requiredを書いた場合は
account_controller.rbにskip_before_filter :login_requiredを書かないと
ループになります。
認証モジュールを組み込むと以下のメソッドが使えます。
- logged_in? - ログインしている場合はtrueが返ります。
- current_user - ログインしているユーザのインスタンスが返ります。
アクションを制限したい場合は以下のようにprotect?メソッドを上書きします。
# loginとabountメソッドは制限しない場合です def protect?(action) if ['login', 'about'].include?(action) return false else return true end end
ユーザによってコントローラのアクションを制限する場合は#authorize?メソッドを上書きします。
# xibbar以外の人に許可します def authorize?(user) user.login != "xibbar" end
Q:両方の制限を加える場合はどうするの?
複数のアクセス権が必要なコントローラを作りたいんですけど。例えば
- いくつかのメソッドは全ての人に見せたい
- いくつかのメソッドは登録してログインさせてから見せたい(コメントの書き込みなど)
- いくつかのメソッドは管理者権限が欲しい(削除など)
A:
# newとcreateメソッドを使えるのはadminだけにする def authorized?(user) if ['new', 'create'].include?(action_name) return false unless user.is_admin? end return true end
以上のようにするとadminだけにできます。Userモデルに
is_admin?を付け加えましょう。
Railsの使えるレンタルサーバ
rootをもらわなくてもRailsが動き、スピードがのろくないレンタルサーバ
(つまりCGIじゃないということ。)
- textdrive http://www.textdrive.com/
- RailsPlayGround http://railsplayground.com/
- BlueHost http://www.bluehost.com/
以下は新ネタ
- webfanction http://www.webfaction.com/
- exabytes http://www.exabytes.com/
- Csoft.net http://www.csoft.net/