rails 中的gem devise提供了注册与登录的功能,用起来比较方便。但是为了自身编程能力,决定学习如何自写出注册与登录功能。
注册功能
用户注册即创建一个用户,这时会用到我们所熟知的CRUD。理解起来很容易,但是做起来并没有那么简单。
首先需要生成user的model,并对其字段进行约束,通常情况下,会是name与email,例如name与email都不为空、长度、格式,为邮箱加索引等,把这些设置好之后,需要设置路由,控制器,还有视图。
Model
约束字段。例如name与email的长度、格式、不为空,密码长度等,且为邮箱加索引。
routes.rb
设置注册路由,一般会是get '/signup', to: 'users#new'
post '/signup', to: 'users#create'
Views
设置注册表单。其中会用到form_for
或者 simple_form_for
Controllers
编写users#new
与 users#create
验证用户
验证用户会用密码,因为我们会为user增加一个字段名称password_digest
,在user的model中,添加has_secure_password
这个方法(因为has_secure_password这个方法调用唯一要求就是对应的model中有password_digest
字段),它有三个作用: (1) 在数据库层中的password_digest中存储安全的密码哈希值(2)获得一对虚拟属性,password
password_confirmation
,而且创建对象时会执行存在性验证和匹配验证(3)获得authenticate
方法,如果密码正确,返回用户对象,如果密码错误,返回false。 要想生成不可逆的密码哈希值,我们需要用到gem 'bcrypt'
,它的作用就是生成哈希密码值。这样即使‘脱库’,用户的真实密码也不会丢失。