rails框架本身就提供了一个加密的方式,在gemfile中提供了一个gem包:
# 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检查更好用一些。