Rails 3.1: has_secure_passwordメソッド
2011/05/27
この前のエントリーでは、Rails 3.1で登場した assign_attributes
という渋いメソッドについて書きました。
今回紹介するのも渋い新仕様です。その名も has_secure_password
。
いま、User
というモデルがあるとします。データベーステーブル users
には
name
password_digest
という2つのカラムがあります。いずれも文字列型です。
app/models/user.rb
を次のように書き換えます。
class User < ActiveRecord::Base has_secure_password end
これで準備完了です。
rails c
でRailsコンソールを起動してください。
まず、Userオブジェクトを作ります。
> User.create!(:name => "tsutomu", :password => "jumbo", :password_confirmation => "jumbo")
驚くべきことに、このコードはエラーを引き起こしません。Rails 3.0までは
class User < ActiveRecord::Base attr_accessor :password, :password_confirmation end
と記述する必要がありましたが、クラスメソッド has_secure_password
で一発です。
バリデーションもやってくれます。
> user0 = User.new(:name => "hanako", :password => "abc", :password_confirmation => "xyz") > user0.valid? => false > user0.errors.full_messages => ["Password doesn't match confirmation"]
さらには、ユーザー認証(authentication)までできます。
> user1 = User.find_by_name("tsutomu") > user1.authenticate("detarame") => false > user1.authenticate("jumbo") => #<User id: 1, name: "tsutomu", ...
便利になりましたね。