0

我试图在散列密码后存储密码,但它在数据库中显示为 NULL。我使用密码字符串和名称字符串为用户生成了一个脚手架,然后更改了 mysql 表以存储散列密码,而不是使用这个:

ALTER TABLE users CHANGE password hashed_password CHAR(40) NULL;

我的模型:

class User < ActiveRecord::Base
  attr_accessor :password
  attr_accessible :name, :password

  validates :name, :uniqueness => true
  validates :password, :length => { :in => 6..20 }

  def before_create
    self.hashed_password = User.hash_password(self.password)
  end

  def after_create
    @password = nil
  end

  private

  def self.hash_password(password)
    Digest::SHA1.hexdigest(password)
  end

end

我正在使用 Rails 3.2.13。

4

1 回答 1

0

我认为你应该使用

 before_create :hash_the_password
 after_create :nil_the_password

 def hash_the_password
    self.hashed_password = User.hash_password(self.password)
 end

 def nil_the_password 
    @password = nil
 end

并不是

 #Wrong?
 def before_create
    ...
 end

所以回调可能是问题所在。

于 2013-06-03T08:10:02.327 回答