rails中登录密码使用has_secure_password

1 篇文章 0 订阅
1 篇文章 0 订阅
刚开始做rails时,用户登录的帐号和密码都是以明文的形式直接存入数据库的。后来意识到,这样做是十分不安全的,就算是直接管理用户、管理数据库的人也不应直接看到用户的密码,而且在客户端和服务器传输用户信息的时候也不安全。所以就要给这个用户的密码加密。
rails框架本身就提供了一个加密的方式,在gemfile中提供了一个gem包:
[code]# Use ActiveModel has_secure_password
gem 'bcrypt-ruby', '~> 3.1.2'[/code]
然后在终端中执行bundle install的命令,应该就可以使用了。但我在使用的过程中遇到了一个问题:
gemfile引好文件,安装好gem包后,在相应的user的model中加入:
[code]class User < ActiveRecord::Base
has_secure_password
end
[/code]
这时,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的方式。
控制登录时输入的内容合法性(格式问题),使用:
[code]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[/code]
如果上面某一项填写有误,会出现error,可以使用@user.error.any?来判断。
但是我觉得bootstrap中提供的表格css检查更好用一些。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值