Rails 3.1 からパスワードの暗号化用のモジュールができたようです。ActiveModel::SecurePassword で定義されていて、ActiveRecord や Mondoid などの ActiveModel を利用しているモデルで使えるそうな。
User モデルに password_digest カラムが設定されている前提で
class User < ActiveRecord::Base has_secure_password end
とすると、下記のような効能が得られます。
- attr_reader :password
- validates_confrmation_of :password
- validates_ppresence_of :password_digest
- password に何か代入すると自動で bcrypt-ruby でハッシュにされて password_digest に代入される
- 文字列がパスワードと等しいかをチェックする authenticate メソッドが定義される
ログイン機能はそれ専用のプラグインを使って作るのが良いのでは?
ログインを簡単に実装するためのプラグインは devise, authlogic 等いろいろありますが、デフォルトの挙動を修正したい時に Rails や Ruby に関する多くの知識が必要とされるので、初心者にはお勧めできません。devise の README にも下記のように書かれています。
If you are building your first Rails application, we recommend you to not use Devise. Devise requires a good understanding of the Rails Framework.
まずはスクラッチでつくってみて、慣れてきたら devise 等のプラグインを試してみるのが良いと思います。これらのプラグインに慣れてしまえば、少量のコードで多くの機能を追加することが出来て大変便利です。
ログイン機能をスクラッチで作る際に参考になるサイト
ログイン機能をスクラッチで作るには下記のASCIIcastsのエントリが大変参考になります。
ASCIIcasts - “Episode 250 - ゼロから作る認証機能”
ASCIIcastsでは Rails3.0 のアプリにログイン機能を追加しているので、 ActiveModel::SecurePassword は使われていません。3.1 でログイン機能をスクラッチで作りたい場合は、上記のソースコードを改変して作ってみると良いと思います:-)