刚开始做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检查更好用一些。