public
Description: ActiveRecord macro that helps encrypt passwords and generate api tokens before_save.
Homepage:
Clone URL: git://github.com/matthewtodd/has_digest.git
README.rdoc

HasDigest

HasDigest is an ActiveRecord macro that makes it easy to write things like encrypted passwords and api tokens before_save. Digest attributes may either stand alone or depend on the values of other attributes. Digests with dependencies are also magically salted for models having a salt attribute.

See the documentation for the has_digest method for options.

Installation

As a gem:

  config.gem 'matthewtodd-has_digest', :lib => 'has_digest', :source => 'http://gems.github.com'

As a plugin:

  script/plugin install git://github.com/matthewtodd/has_digest.git

Usage

In your model:

  class User < ActiveRecord::Base
    has_digest :encrypted_password, :depends => :password
  end

In your migrations:

  class CreateUsers < ActiveRecord::Migration
    def self.up
      create_table :users do |t|
        t.string :salt, :encrypted_password, :limit => 40
      end
    end

    def self.down
      drop_table :users
    end
  end

In your tests:

  class UserTest < ActiveSupport::TestCase
    should_have_digest :encrypted_password, :depends => :password
  end

Back in your model:

  class User < ActiveRecord::Base
    def authenticate(password)
      encrypted_password == digest(salt, password)
    end
  end

Copyright © 2008 Matthew Todd, released under the MIT license