この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
こんにちわ〜。
2日続けてのプラグイン紹介で、今回はログインのプラグインの紹介です。
前はacts_as_authenticationというプラグインがよく使われてたらいいんですが、
サポートが打ち切られたらしくrails2.0系からは、restful_authenticationを代わりに使ってほしいそうです。
とゆうわけで解説の始まり始まり〜。。。。
restful_authenticationのインストール
$ruby script/plugin http://svn.techno-weenie.net/projects/plugins/restful_authentication –force
acts_as_state_machineのインストール
$./script/plugin install http://elitists.textdriven.com/svn/plugins
このプラグインは、会員の状態管理などを行ってくれる。
コントローラーなど作成
$ ./script/generate authenticated user sessions –include-activation –stateful
設定
config/rootes.rb
# 次の4行を書く。1行目はactivate(本会員)にするために必要、
map.activate ‘/activate/:activation_code’, :controller => ‘users’, :action => ‘activate’, :activation_code => nil
map.signup ‘/signup’, :controller => ‘users’, :action => ‘new’
map.login ‘/login’, :controller => ‘sessions’, :action => ‘new’
map.logout ‘/logout’, :controller => ‘sessions’, :action => ‘destroy’
controllers/sessions_controller.rb
# Be sure to include AuthenticationSystem in Application Controller instead
include AuthenticatedSystem
この2行を削除してcontrollers/application_controller.rbにコピーする。
localhost:3000/signupなどで仮会員を作成その後rootへ戻るのでどこかで本会員へするためuser/activateへ飛ばさなくてはならない、
飛ばすときに仮登録したuserのactivation_codeを持たせてあげないと反応しない、これではじめてloginが可能となる。
acts_as_state_machine
作成されたusers_controllerの中に今の説明中に説明していないsuspend,unsuspend,destroy,purgeメソッドが存在する。
これは、acts_as_state_machineの機能で、model/user.rbの20行以降で定義されている。
acts_as_state_machine :initial => :pending
state :passive
state :pending, :enter => :make_activation_code
state :active, :enter => :do_activate
state :suspended
state :deleted, :enter => :do_delete
これは、初期状態のときstate :pendingへ移行して:enter => :make_activation_codeから
def make_activation_code
self.deleted_at = nil
self.activation_code = Digest::SHA1.hexdigest( Time.now.to_s.split(//).sort_by {rand}.join )
end
こいつを呼び出している、これは、仮登録状態のためのキーを発行している このキーを受け取ってactivateへ行くと本登録をしてくれる。それと同時に、仮登録のキーを
def do_activate
@activated = true
self.activated_at = Time.now.utc
self.deleted_at = self.activation_code = nil
end
これで削除している。
suspend,unsuspendは、状態変化ぐらいかな?
あ、状態変化は、userテーブルのsateカラムが変化してます。
destroyは、状態変化とdeletd_atカラムに現在時間を入れています。
purgeは、物理削除です。ちなみにpurgeは追放とかいう意味です。
これがrestful_authenticationの一通りの流れです。仮登録のときメール飛ばして返ってきたのを本登録にするとかもいろいろできるらしいです。(今回は、そこまでやってません)
というわけで終しまいです。