`

使用和学习authenticate插件-模型类

阅读更多
ruby 代码
 
  1. require 'digest/sha1'  
  2. class User < ActiveRecord::Base  
  3.   # Virtual attribute for the unencrypted password  
  4.   attr_accessor :password  
  5.   
  6.   validates_presence_of     :login:email  
  7.   validates_presence_of     :password,                   :if => :password_required?  
  8.   validates_presence_of     :password_confirmation,      :if => :password_required?  
  9.   validates_length_of       :password:within => 4..40, :if => :password_required?  
  10.   validates_confirmation_of :password,                   :if => :password_required?  
  11.   validates_length_of       :login,    :within => 3..40  
  12.   validates_length_of       :email,    :within => 3..100  
  13.   validates_uniqueness_of   :login:email:case_sensitive => false  
  14.   before_save :encrypt_password  
  15.   
  16.   # Encrypts some data with the salt.  
  17.   def self.encrypt(password, salt)  
  18.     Digest::SHA1.hexdigest("--#{salt}--#{password}--")  
  19.   end  
  20.   
  21.   # Encrypts the password with the user salt  
  22.   def encrypt(password)  
  23.     self.class.encrypt(password, salt)  
  24.   end  
  25.   
  26.   def remember_token?  
  27.     remember_token_expires_at && Time.now.utc < remember_token_expires_at   
  28.   end  
  29.   
  30.   protected  
  31.     # before filter   
  32.     def encrypt_password  
  33.       return if password.blank?  
  34.       self.salt = Digest::SHA1.hexdigest("--#{Time.now.to_s}--#{login}--"if new_record?  
  35.       self.crypted_password = encrypt(password)  
  36.     end  
  37.       
  38.     def password_required?  
  39.       crypted_password.blank? || !password.blank?  
  40.     end  
  41. end  
上面列出经过节选的User模型代码,所有验证一目了然,值得注意的模型类中的password属性,这个实际上并不对应数据库中的column,而是一个虚拟的数据表属性,password从表单的password元素中获得,存到数据表中的是经过加密的密码。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics