原文链接:https://www.qiuzhi99.com/articles/ruby/3.html

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#newuser_session POST   /users/sign_in(.:format)                         devise/sessions#createdestroy_user_session DELETE /users/sign_out(.:format)                        devise/sessions#destroyuser_password POST   /users/password(.:format)                        devise/passwords#createnew_user_password GET    /users/password/new(.:format)                    devise/passwords#newedit_user_password GET    /users/password/edit(.:format)                   devise/passwords#editPATCH  /users/password(.:format)                        devise/passwords#updatePUT    /users/password(.:format)                        devise/passwords#updatecancel_user_registration GET    /users/cancel(.:format)                          devise/registrations#canceluser_registration POST   /users(.:format)                                 devise/registrations#createnew_user_registration GET    /users/sign_up(.:format)                         devise/registrations#newedit_user_registration GET    /users/edit(.:format)                            devise/registrations#editPATCH  /users(.:format)                                 devise/registrations#updatePUT    /users(.:format)                                 devise/registrations#updateDELETE /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的介绍就到此为止。

认证系统之 devise 简单入门教程 (三)相关推荐

  1. emacs 自带的简单入门教程

    emacs 自带的教程是 英文版和繁体中文版,下面的内容是利用在线繁体转简单工具生成 有些地方翻译的不精准,凑和看 在emacs 中按下 Ctrl-h t 或者F1 t即可打开自带的此文档 原文:em ...

  2. 分布式锁简单入门以及三种实现方式介绍(滴滴)

    很多小伙伴在学习Java的时候,总是感觉Java多线程在实际的业务中很少使用,以至于不会花太多的时间去学习,技术债不断累积!等到了一定程度的时候对于与Java多线程相关的东西就很难理解,今天需要探讨的 ...

  3. Git快速入门篇—— Windows版本淘宝镜像快速下载安装详细步骤及简单入门教程(附带图文教程)

    Git快速入门篇-- Windows版本淘宝镜像快速下载安装详细步骤及简单入门教程(附带图文教程) 前言:我们平时在整理代码的时候,尤其是与别人一起开发项目的时候,常常涉及到代码的更新,因此代码版本问 ...

  4. numpy基础篇-简单入门教程4

    numpy基础篇-简单入门教程4 np.set_printoptions(precision=3),只显示小数点后三位 np.random.seed(100)rand_arr = np.random. ...

  5. python爬虫入门教程(三):淘女郎爬虫 ( 接口解析 | 图片下载 )

    2019/10/28更新 网站已改版,代码已失效(其实早就失效了,但我懒得改...)此博文仅供做思路上的参考 代码使用python2编写,因已失效,就未改写成python3 爬虫入门系列教程: pyt ...

  6. Proteus简单入门教程以及使用Proteus仿真STM32F103单片机和Arduino单片机

    工欲善其事必先利其器,有条件的朋友直接使用开发板学习即可,但有时候手边没有实物开发板可以用,那么可以借助一些仿真软件运行我们的程序,Proteus算是使用的比较多的一种仿真软件,我们使用它来做STM3 ...

  7. 分布式锁简单入门以及三种实现方式介绍

    分布式锁简单入门以及三种实现方式介绍 2018年01月11日 21:16:28 徐刘根 阅读数:37912 标签: 分布式 分布式锁 高并发 更多 个人分类: 集群分布式 版权声明:本文为博主原创文章 ...

  8. qpython3可视图形界面_PySide——Python图形化界面入门教程(三)

    PySide--Python图形化界面入门教程(三) --使用内建新号和槽 --Using Built-In Signals and Slots 上一个教程中,我们学习了如何创建和建立交互widget ...

  9. SpringCloud 入门教程(三): 配置自动刷新

    Spring Cloud 入门教程(三): 配置自动刷新 之前讲的配置管理, 只有在应用启动时会读取到GIT的内容, 之后只要应用不重启,GIT中文件的修改,应用无法感知, 即使重启Config Se ...

最新文章

  1. MySQL IN、Exist关联查询时,我们为什么建议小表驱动大表?
  2. 矩阵A对任意的可逆矩阵p都有Ap=pA,证明A为数量矩阵
  3. Facebook构建高性能Android视频组件实践之路
  4. Android char数据类型乱码��解决方法
  5. 利用scrapy爬取文件后并基于管道化的持久化存储
  6. dd命令安装Linux
  7. php nodelist,了解NodeList、HTMLCollection以及NamedNodeMap的使用(代码)
  8. 百度编辑器回显js报错Uncaught SyntaxError: Invalid or unexpected token
  9. Java 和 Python 疯狂 PK,等等,请不要放弃 C 语言
  10. 扇贝有道180917每日一句
  11. 我眼中的架构师:一个优秀的架构师应该具备什么?
  12. java super extend 区别_Java泛型中extends和super的区别
  13. oracle adf源代码在哪里,第 3 章 | 从设计到实践全面了解 Oracle ADF 应用程序
  14. 饿了么“盛夏之战”,背后的底气是什么? | 一点财经
  15. 榆熙教育:拼多多有效提高店铺出评率的技巧
  16. 正则匹配以xx开头以xx结尾的单词
  17. 简书python_用python轻松刷简书文章访问量
  18. 【设计模式】我对设计模式的C语言解读(下)
  19. 固网运营商集体突击视频 宽带成“杀手锏”
  20. 关于市场(闸机头--人脸识别桌面终端)

热门文章

  1. 手机远程启动汽车,汽车远程启动还是手机控制好!有一种远程手机启动热车系统非常的不错是什么功能知道吗?
  2. Mosquitto安装配置和使用指南
  3. 【脑洞大开】神经网络vs非公理化推理系统(NARS)
  4. MAC升级gcc版本
  5. 高通msm8916 gpio笔记(基于设备树)
  6. ag-gird 多层表头文字居中
  7. VS2015中更改项目名称
  8. android 遥控器方向,android万能遥控器之一--前言及发射部分的简单实现
  9. java微信登录认证
  10. 典藏推荐:《乱世佳人》(《飘》)