世界上最伟大的投资就是投资自己的教育

全场限时 5 折

首页Ruby
随风 · 练气

认证系统之 devise 简单入门教程 (三)

随风发布于4821 次阅读

1.devise 是什么?

devise 是一个 gem,一个包含用户登录注册系统的 gem,用来就可以来轻易创建登录注册系统,而不用你再去重写一套登录逻辑,它很简单,很快就能使用起来。它会指引你创建相关的数据表,创建 view,生成 route,所有的一切它都会帮你完成,你只需要按照官方的 readme 文件简单操作几下就好了。5 分钟内就可以实现一个登录注册系统。而且它是业界公认的优秀的 gem,几乎没有 rails 程序员不认识它的吧。它设计得很优美,学习它的源码也可以学到很多技能和知识。就算你以后用不用它,也是值得你学习的。按照官方文档对它的特征的描述,我翻译一下是这样的:

  • 基于 rack
  • 基于 rails engine(引擎) 的 mvc 完整解决方案
  • 允许你有多个同时登录的模型
  • 基于模组化概念:只用你需要的

我们只了解一下就好了,以后使用中会不断领悟和体会到的。实践出真知。

2.devise 安装和使用

其实按照官方的指示来就好了,不过我会给你提最重要的部分。

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

3.devise 的思考

关于 devise 的使用方法,上面只是做了简单的介绍。具体的还是要去仔细阅读官方的 readme 文档。那里有更为详尽的介绍和说明。这里要提几点 devise 扩展的东西 。第一,devise 是一个比较优秀的 gem,使用得也比较普遍,所以有很多人基于它之上实现了很多关于 devise 的扩展功能,可以说是,相当于 devise 的插件。第二,由于是 devise 是模块化的,里面有一些功能是蛮好的,就像我们在实际环境中不用 devise,我们也可以借鉴和参考里面的设计去实现我们的功能,例如超时功能,例如失败登录的功能。第三,在 devise github 网站里有很多 wiki 文档,有很多常见的功能或需求在里面可以找到答案。

devise 的介绍就到此为止。

本站文章均为原创内容,如需转载请注明出处,谢谢。

0 条回复
暂无回复~~
喜欢
统计信息
    学员: 29064
    视频数量: 1973
    文章数量: 489

© 汕尾市求知科技有限公司 | Rails365 Gitlab | Qiuzhi99 Gitlab | 知乎 | b 站 | 搜索

粤公网安备 44152102000088号粤公网安备 44152102000088号 | 粤ICP备19038915号

Top