`

使用和学习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元素中获得,存到数据表中的是经过加密的密码。
分享到:
评论

相关推荐

    WebKit和Chromium源码及原理剖析.pdf

    ### WebKit和Chromium源码及原理剖析 ...#### 第27篇 xcode使用lldb的python脚本查看WebKit的WTF::String和Vector等基础类 - **lldb Python脚本**: - lldb是Xcode自带的调试工具,支持使用Python脚本...

    play framework 学生信息管理系统

    10. **安全(Security)**:Play提供了基本的身份验证和授权机制,如`play-authenticate`插件,可以实现用户注册、登录、权限控制等功能。 综上所述,"学生信息管理系统"项目涵盖了Play Framework的基础知识,包括...

    authentic-server:使用Passport进行身份验证的Composable Express.js应用

    【标题】"authentic-server:使用Passport进行身份验证的Composable Express.js应用"涉及到的主要知识点是关于Node.js中的Express.js框架以及Passport模块在构建Web应用中的应用。Express.js是Node.js领域中最受欢迎...

    django_login

    Django的中间件(Middleware)是一种轻量级、低级别的“插件”系统,可以在请求进入视图之前和响应返回给用户之后执行代码。`LoginRequiredMiddleware`是一个例子,它确保只有已登录的用户才能访问某些页面。 8. ...

    Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)

    随着Django框架的不断迭代更新,许多基于早期版本的插件或扩展可能无法直接适应新版本的要求,比如xadmin这样的强大管理后台工具。本文针对在Django2.1环境中集成xadmin时可能遇到的问题进行了汇总,并提供了具体的...

Global site tag (gtag.js) - Google Analytics