rails中登录密码使用has_secure_password_Ruby_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > Ruby > rails中登录密码使用has_secure_password

rails中登录密码使用has_secure_password

 2013/12/20 20:09:14  sunwenpeng  程序员俱乐部  我要评论(0)
  • 摘要:刚开始做rails时,用户登录的帐号和密码都是以明文的形式直接存入数据库的。后来意识到,这样做是十分不安全的,就算是直接管理用户、管理数据库的人也不应直接看到用户的密码,而且在客户端和服务器传输用户信息的时候也不安全。所以就要给这个用户的密码加密。rails框架本身就提供了一个加密的方式,在gemfile中提供了一个gem包:#UseActiveModelhas_secure_passwordgem'bcrypt-ruby','~>3.1
  • 标签:has 使用 rails
  刚开始做rails时,用户登录的帐号和密码都是以明文的形式直接存入数据库的。后来意识到,这样做是十分不安全的,就算是直接管理用户、管理数据库的人也不应直接看到用户的密码,而且在客户端和服务器传输用户信息的时候也不安全。所以就要给这个用户的密码加密。
  rails框架本身就提供了一个加密的方式,在gemfile中提供了一个gem包:
class="java" name="code"># Use ActiveModel has_secure_password
gem 'bcrypt-ruby', '~> 3.1.2'

  然后在终端中执行bundle install的命令,应该就可以使用了。但我在使用的过程中遇到了一个问题:
  gemfile引好文件,安装好gem包后,在相应的user的model中加入:
class User < ActiveRecord::Base
   has_secure_password
end

  这时,has_secure_password有下划线,提示是undefined method,我的第一反映是gem没安装正确,用gem list查看却是安装成功了。
  最后查看了rails使用的ruby版本是2.0.0,在gemfile中也写入了,而在rubymine的设置中ruby SDK and Gems 中设置的ruby版本却是RVM ruby—1.9.3-P448 。这就导致了虽然在rails工程中下载了相应的bundle,下载下来的gem却没有使用到工程中,修改rubymine的SDK设置后,下划线就消失了。
  这时提供了的密码保护功能,默认用户的密码属性是password_digest,这是加密后的密码,在新增和修改用户密码时默认密码的两个关键key是password和password_confirmation,当这两个值相等的时候才会真正改变用户密码,否则框架中提供了自动的相应的报错信息。报错信息是英文的,需要几行代码来完成汉化
  在登录和查找用户密码的时候使用:
  user.authenticate(params[:password])来验证密码。
  还有就是给每个用户产生一个token,大多用的是md5的方式。
  控制登录时输入的内容合法性(格式问题),使用:
 
validates :name, :presence => true, :uniqueness => {:case_sensitive => false}
  validates :email, :presence => true, :uniqueness => {:case_sensitive => false}, :email_format => true
  validates :password, :length => { :minimum => 6 }, :on => :create

  如果上面某一项填写有误,会出现error,可以使用@user.error.any?来判断。
  但是我觉得bootstrap中提供的表格css检查更好用一些。
上一篇: 李嘉诚斥资24.3亿美元收购澳最大运营商香港子公司 下一篇: 没有下一篇了!
发表评论
用户名: 匿名