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番は不要とあったのに、今回ダメだったかは不明。
RubyもRailsの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