原文链接:https://www.qiuzhi99.com/articles/ruby/3.html
devise是一个gem,一个包含用户登录注册系统的gem,用来就可以来轻易创建登录注册系统,而不用你再去重写一套登录逻辑,它很简单,很快就能使用起来。它会指引你创建相关的数据表,创建view,生成route,所有的一切它都会帮你完成,你只需要按照官方的readme文件简单操作几下就好了。5分钟内就可以实现一个登录注册系统。而且它是业界公认的优秀的gem,几乎没有rails程序员不认识它的吧。它设计得很优美,学习它的源码也可以学到很多技能和知识。就算你以后用不用它,也是值得你学习的。按照官方文档对它的特征的描述,我翻译一下是这样的:
我们只了解一下就好了,以后使用中会不断领悟和体会到的。实践出真知。
其实按照官方的指示来就好了,不过我会给你提最重要的部分。
gem 'devise'
这行添加到Gemfile文件中,这应该不用多说的。
rails generate devise:install
这行命令之后会有很多提示,按照提示做最好了。
你试下就清楚了,只不过是添加了initializer配置文件,这个文件启动的时候就会加载。可以进去里面看看它的内容。
rails generate devise MODEL
MODEL可以替换成user, admin等,一般来说你就写成user就好了,但是有些情况下是这样的,你可能给你的客户一套登录系统,就存在users表就好了,但是你有很多员工,员工需要登录后台,有时候为了方便 ,这两个系统是需要分开的,这个时候,你可能需要多一套登录系统,那就是叫admin好了,员工的登录数据会存在admins表中,当然,名字是人定的,上面只不过是举个例子,简单说明一下。
执行这行语句会生成各种routes,到时候就能用于登录之类的。我们后续会说。
之后执行rake db:migrate
就真正生成数据表啦。
上面的工作做的是安装,生成数据表,生成routes,控制器,action之类也是devise给你写好的。view也是有默认给你写好的。
安装工作完成。接下来就是使用。
第一步,肯定是添加注册框啦,注册之后有账号才能登录呀。注册框在哪,需要路由地址吧。我们不用写了,devise帮我们生成好了。你运行rake routes
就可以看到了。具体的原因是devise在config/routes.rb
文件里添加了一行
devise_for :users
生成的路由是这样的。
new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
user_password POST /users/password(.:format) devise/passwords#create
new_user_password GET /users/password/new(.:format) devise/passwords#new
edit_user_password GET /users/password/edit(.:format) devise/passwords#edit
PATCH /users/password(.:format) devise/passwords#update
PUT /users/password(.:format) devise/passwords#update
cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel
user_registration POST /users(.:format) devise/registrations#create
new_user_registration GET /users/sign_up(.:format) devise/registrations#new
edit_user_registration GET /users/edit(.:format) devise/registrations#edit
PATCH /users(.:format) devise/registrations#update
PUT /users(.:format) devise/registrations#update
DELETE /users(.:format) devise/registrations#destroy
好多!好晕!按照名称大体扫一下,就可以分成三部分,一部分是登录的,一部分是注册的,一部分是修改密码的。不过,我们最先需要的是只是注册框,登录框,退出登录按钮。找出来,复制下来。
<%= link_to('注销', destroy_user_session_path, :method => :delete) %>
<%= link_to('注册', new_registration_path(:user)) %>
<%= link_to('登录', new_session_path(:user)) %>
现在你就可以用了,devise也已经帮你弄好了view,不过是最粗糙的。如果这个时候,你要加上自己的登录注册框时,你可能需要修改view,这个时候,devise也帮我们做好了,将它默认的那一套view复制过来,在那基础上改就好了,只需要一个命令
rails g devise:views
还有一个就是,有些页面是不需要登录就能看到的,例如首页,有些页面是需要登录才能看到,例如个人信息页。
这个是请求里的事情,在controller里控制一下就好了。
before_action :authenticate_user!
这个基本上你自己写登录注册的系统也是需要差不多写这个类似的方法。
其他的例如判断用户是否登录user_signed_in? 可以在view里使用,这样就可以根据是否登录来显示是登录,还是退出,毕竟,你登录完之后就要显示退出按钮,没登录之前要显示登录按钮。可以这样改一下。
<% if user_signed_in? %>
<%= link_to('注销', destroy_user_session_path, :method => :delete) %>
<% else %>
<%= link_to('注册', new_registration_path(:user)) %>
<%= link_to('登录', new_session_path(:user)) %>
<% end %>
还有最后一个最要的。就是current_user。这个方法可以在view和controller里用,取当前的用户,其实就是一条user记录,不过是当前登录的。能取里面的name等。例如current_user.name
关于devise的使用方法,上面只是做了简单的介绍。具体的还是要去仔细阅读官方的readme文档。那里有更为详尽的介绍和说明。这里要提几点devise扩展的东西 。第一,devise是一个比较优秀的gem,使用得也比较普遍,所以有很多人基于它之上实现了很多关于devise的扩展功能,可以说是,相当于devise的插件。第二,由于是devise是模块化的,里面有一些功能是蛮好的,就像我们在实际环境中不用devise,我们也可以借鉴和参考里面的设计去实现我们的功能,例如超时功能,例如失败登录的功能。第三,在devise github网站里有很多wiki文档,有很多常见的功能或需求在里面可以找到答案。
devise的介绍就到此为止。