Rails3.2 で認証機能を作る

目的:認証機能(ユーザは予めDBに登録)

 参考
  http://starryskylogic.blogspot.jp/2012/04/ruby-on-rails32.html

1.Gemfileにbcryptrubyを追加
Gemfile内のgem 'bcrypt-ruby', '~>3.0.0~のコメントアウトを外した上でbundle install

2.User modelの作成

rails g model user login_name:string password_digest:string
rake db:migrate

※password_digestのカラム名は変更してはいけない

3./app/model/users.rbにhas_secure_passwordを追加

class User < ActiveRecord::Base
  has_secure_password
  attr_accessible :login_name, :password_digest
end

4.DBに直接、アカウントを作成

rails c
User.create!(:name => "admin", :password => "pass", :password_confirmation => "pass")

※ここで下記エラー発生

ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes: password, password_confirmation

エラーを基に調べて試行錯誤の末に解決
参考URL
http://www.goto.info.waseda.ac.jp/~wei/weiki/index.php?log%2F2012-04-20
5./app/model/users.rbに「:password,:password_confirmation」を追加

class User < ActiveRecord::Base
  has_secure_password
  attr_accessible :login_name, :password_digest, :password, :password_confirmation
end

6.再度実行
password_digestにHash化されたパスワードが登録されて成功!
参考にしたサイトには5番は不要とあったのに、今回ダメだったかは不明。
RubyRailsのVer、OSも一緒なのに・・・※1

※1:Rails 3.2.3では、config\application.rbのwhitelist_attributesの設定が、デフォルトでtrueに変更されたらしい。参考にしたやつはRails3.2.2でした
http://www.oiax.jp/rails3book/rails323_whitelist_attributes