ruby 代码
- require 'digest/sha1'
- class User < ActiveRecord::Base
-
- attr_accessor :password
-
- validates_presence_of :login, :email
- validates_presence_of :password, :if => :password_required?
- validates_presence_of :password_confirmation, :if => :password_required?
- validates_length_of :password, :within => 4..40, :if => :password_required?
- validates_confirmation_of :password, :if => :password_required?
- validates_length_of :login, :within => 3..40
- validates_length_of :email, :within => 3..100
- validates_uniqueness_of :login, :email, :case_sensitive => false
- before_save :encrypt_password
-
-
- def self.encrypt(password, salt)
- Digest::SHA1.hexdigest("--#{salt}--#{password}--")
- end
-
-
- def encrypt(password)
- self.class.encrypt(password, salt)
- end
-
- def remember_token?
- remember_token_expires_at && Time.now.utc < remember_token_expires_at
- end
-
- protected
-
- def encrypt_password
- return if password.blank?
- self.salt = Digest::SHA1.hexdigest("--#{Time.now.to_s}--#{login}--") if new_record?
- self.crypted_password = encrypt(password)
- end
-
- def password_required?
- crypted_password.blank? || !password.blank?
- end
- end
上面列出经过节选的User模型代码,所有验证一目了然,值得注意的模型类中的password属性,这个实际上并不对应数据库中的column,而是一个虚拟的数据表属性,password从表单的password元素中获得,存到数据表中的是经过加密的密码。
分享到:
相关推荐
### WebKit和Chromium源码及原理剖析 ...#### 第27篇 xcode使用lldb的python脚本查看WebKit的WTF::String和Vector等基础类 - **lldb Python脚本**: - lldb是Xcode自带的调试工具,支持使用Python脚本...
10. **安全(Security)**:Play提供了基本的身份验证和授权机制,如`play-authenticate`插件,可以实现用户注册、登录、权限控制等功能。 综上所述,"学生信息管理系统"项目涵盖了Play Framework的基础知识,包括...
【标题】"authentic-server:使用Passport进行身份验证的Composable Express.js应用"涉及到的主要知识点是关于Node.js中的Express.js框架以及Passport模块在构建Web应用中的应用。Express.js是Node.js领域中最受欢迎...
Django的中间件(Middleware)是一种轻量级、低级别的“插件”系统,可以在请求进入视图之前和响应返回给用户之后执行代码。`LoginRequiredMiddleware`是一个例子,它确保只有已登录的用户才能访问某些页面。 8. ...
随着Django框架的不断迭代更新,许多基于早期版本的插件或扩展可能无法直接适应新版本的要求,比如xadmin这样的强大管理后台工具。本文针对在Django2.1环境中集成xadmin时可能遇到的问题进行了汇总,并提供了具体的...