Mac环境

macOS High Sierra 版本 10.13.1

ruby 2.4.1p111

Rails 5.1.4

编辑软件:Atom(你可以选择其它软件,例如:Sublime Text、Ruby Mine 等等,我这里就使用 Atom )

DB Browser for SQLit3 (数据库读取软件)

注意:本次是从 0 开始做这个小练习,适合小白学习使用,大侠做.爱.做的事去吧,安装ruby和rails的方法这里就不写了,小白可以去 查阅。

xxooxxooxxooxxooxxooxxooxxooxxooxxooxxooxxooxxooxxooxxooxxooxxooxxooxxooxxooxxooxxooxxooxxooxxooxxooxxooxxooxxooxxooxxooxxooxxooxxooxxoo

Devise是Ruby On Rails的一个三方权限认证组件,通过它你可以无需编码快速生成一个带有登陆、注册、权限认证和重置密码的用户认证模块。

在Devise的基础上,另外增加一些功能实现多角色权限管理,当然还可以使用Cancancan Gem,但这里并不介绍Cancancan,因为我还没弄懂(T_T!)。

操作流程:

1、打开终端(Terminal),进到你的工作目录,例如我的是workspace下,运行以下新建rails项目代码:

rails new project 

注:以上这个代码是新建一个rails项目,名字为project。

2、进入project

cd project  

注:以上这个代码是进入project项目文件夹中,进入后会发现里面有很多文件了,这是rails为项目自动生成的,查看方法可以在终端用ls命令。

3、打开编辑软件Atom,点击 File->Open->Users->mac->workspace->project (这个是我当前的工作目录,你的可能不一样),打开后如下图:

4、在Atom左边目录中找到Gemfile,进入,添加以下代码(如图):

gem 'devise'

注:以上这个代码是添加devise gem,如果不明白gem是什么这意思,可以点 这里 查看。

保存Gemfile文件。

5、打开终端(Terminal),在project的目录下输入下面代码:

bundle install

注:以上这个代码是安装devise gem组件,这里的install可以省略不输入,输完后回车,刷刷刷等一会就安装好了。

6、继续在终端(Terminal)下输入以下代码:

rails g devise:install

注:以上这个代码是「产生devise设定档」(这翻译是台湾同胞文章那里抄的),按回车后你会发现以下内容:

按照上图,我们要做以下几个操作:

a、打开config/environments/development.rb 文件,在里面输入

config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

注:以上这个代码是邮件功能的设置

b、打开 config/routes.rb,在里面输入

root to: "home#index"

注:以上这个代码是设置http://localhost:3000的访问路由,这里还没有创建这个home目录和index文件,下面再说。

c、打开app/views/layouts/application.html.erb 文件,加入以下代码:

<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>

注:以上这个代码是显示flash信息

d、在终端输入以下代码:

rails g devise:views

注:以上这个代码是产生html模板,包含有注册、登录、忘记密码、Email等页面,并放在app/views/devise目录下。

e、现在添加一个提前routes.rb里提到的home目录和index文件,在终端执行以下代码:

rails g controller home index

注:以上这个代码是产生了home controller index,意思就是我们设置的首页。另外我们到回routes.rb文件里(config/routes.rb),把 get 'home/index' 删除掉,只用 root to: "home#index" 就可以了。

以上就是第6步的所有操作。

7、在终端输入以下代码:

rails g devise user

注:以上这个代码是产生 User Model 和 Migration(db/migrate/20171204141200_devise_create_users.rb,Migration产生的这个文件,20171204141200这个时间戳不一样,其它基本一样。)

8、在终端下输入以下代码:

rails db:migrate

注:以上这个代码是建立users资料表(简单的说就是创建了一个以user为名的的sqlite3数据库表格),你可以使用 DB Browser for SQLit3 软件读取这个数据库,以下图中的是我的项目路径。

9、创建一个list列表,这个list是用scaffold(脚手架)直接产生出来,这个list作用是演示登录后的客户浏览页面,list具体功能看图片。

在终端输入以下代码:

rails g scaffold list name idcard phone

接着在终端输入以下代码:

rails db:migrate

注:以上就是用 rails 的 scaffold 强大的功能生产出一个具有添加、删除、修改、显示的功能,看图:

10、用Atom打开app/controllers/lists_controller.rb,把以下代码输入相应的位置:

before_action :authenticate_user!

注:这个是Devise的提供的方法,验证登录后才能打开这个list页面(第9步的页面)。

11、增加一个注册登录的导航,按下方法操作:

打开app/views/layouts/application.html.erb,输入以下代码:

<% if current_user %><%= link_to('登出', destroy_user_session_path, :method => :delete) %> |<%= link_to('修改密碼', edit_registration_path(:user)) %><% else %><%= link_to('註冊', new_registration_path(:user)) %> |<%= link_to('登入', new_session_path(:user)) %>
<% end %>

12、接下来做权限功能,首先要给数据库的users表增加一个字段,在终端输入以下代码:

rails g migration add_role_to_users

注:这里代码是给数据库的users表增加一个字段 role 。

打开db/migrate/20171204142005_add_role_to_users.rb,这个就是刚刚上面的这个代码产生的一个文件,这里的时间戳20171204142005和我不一样的。

添加以下代码到这个文件里:

add_column :users, :role, :string

注:这里代码意思是数据库 users 表增加 role 字段,属性为 string 。

然后终端里执行以下代码:

rails db:migrate

13、打开app/models/user.rb文件,增加代码

def admin?self.role == "admin"
end

 注:以上代码是admin方法,就是权限判断这个admin字符时用的。

14、打开app/controllers/application_controller.rb,增加以下代码:

  protecteddef authenticate_adminunless current_user.admin?# flash[:alert] = "Not allow!"redirect_to root_pathendend

注:这里代码是做一个私有方法,判断登录用户为admin后直接跳转到首页。

15、打开app/controllers/lists_controller.rb,我这里设置用户的 role 为 admin 时可进入 lists 页面,输入以下代码:

  before_action :authenticate_user!  # 這個是 devise 提供的方法,先檢查必須登入before_action :authenticate_admin # 再檢查是否有權限

注:上面#号就是解释这两个方法的作用。

16、在终端进入你的项目目录,我的是这样的 cd workspace/project ,然后输入rails s,就运行服务器,在你的浏览器打开http://localhost:3000

效果图如上面。

这样就实现了刚才12步操作得出的效果,可以注一个账号,登录试试行?

注册成功后的页面:

17、接下来给刚刚注册的 1@1.com 的记录增加 role 的内容,用 DB Browser for SQLit3 打开项目数据库

给 1@1.com 的 role 增加 admin 字符,记得保存操作。

18、现在给 home#index 页面加一个链接到 lists 。打开 app/views/home/index.html.erb ,输入以下代码:

<%= link_to "Lists", lists_path %>

注:这个代码就是链接到 lists 去的。

保存后,退出账号再登录进去看看是不是多了个 Lists 。

点击 Lists 进去看看就如下图:

你可以再注册一个账号登录一下看看,这个新的账号肯定会没有 Lists 这个链接,因为这个账号记录没有给增加 role 的 admin 字符,你可以打开数据库看看,目前只能手动添加进去。迟一点我再更新一些功能。

19、目前只有admin这个权限判断,接着我们做多一个叫做 client (客户)的权限。首先我们先用 scaffold 建立一个叫做 client 的功能,代码如下面:

rails g scaffold client username sex

注:这里代码就是采用 rails 强大的脚手架功能产生一个 client 的功能,这个功能有 username 和 sex 两个字段。

接着就如下代码:

rails db:migrate

注:以上2行代码就可以生成一整套 CURD 的 client 功能。

20、打开 app/controllers/home_controller.rb ,增加以上代码:

before_action :authenticate_user!

注:这个是 devise 提供的方法,先检查必须登录。

21、打开 app/controllers/application_controller.rb ,输入以下代码:

def authenticate_clientunless current_user.client?# flash[:alert] = "Not allow!"redirect_to root_pathendend

注:这个是判断当前用户是 client 的方法,和 admin 几乎是一样。同理如果想多加几个角色,就可以使用同样的方法,举一反三。

22、打开 app/views/home/index.html.erb ,输入以下代码:

<% if current_user.admin? %><%= link_to "Lists", lists_path %><% elsif current_user.client? %><%= link_to "Client", clients_path %><% else %><% root_path %>
<% end %>

注:这里用了current_user.admin? 和 current_user.client? 方法判断登入的 role 。

23、再注册一个账号:

24、用 DB Browers for SQLite 打开当前项目数据库,给 2@2.com 的 role 字段增加 client 字符。

25、用 2@2.com 登录后就发现,之前 Lists 变成了 Client 了。点一下 Client 看看有什么不一样?

要看看这个权限到底有没有用,你可以登录 2@2.com  后,直接在地址栏上把 http://localhost:3000/clients 修改为 http://localhost:3000/lists ,你就会发现马上跳回了 http://localhost:3000/

小结:以上25个操作基本实现了注册登录和权限判断功能,当然这个方法不是最好的,不过可以应付一些小项目。

接下来我继续把功能完善一些后再写出来吧。

本教程参考了Ruby on Rails实战圣经,感谢作者ihower的分享。 https://ihower.tw/rails/auth.html

转载于:https://www.cnblogs.com/roy0524/p/7979391.html

rails + devise 用户注册登录及权限判断相关推荐

  1. java springmvc权限校验_详解Spring MVC使用Filter实现登录及权限验证判断

    登录和权限验证判断在后台管理系统中是最常用的功能,这部分代码是比较固定和独立的,为了减少对业务代码入侵性,一般我会考虑使用Filter来实现,下面我就来详细说一下我的实现思路和代码: 前台页面: St ...

  2. 三层结构的任务管理系统可以实现登录,判断登录用户权限等操作

    任务要求 idea jdk1.8 三层结构的任务管理系统可以实现登录,判断登录用户权限等操作 任务管理系统 一.系统需求 查询所有任务信息:展示所有任务信息 录入任务信息: 用户输入:任务名, 预计完 ...

  3. java 银行管理系统怎么储存账户信息_银行管理系统 实现用户注册 登录 存、取款 交易记录查询和修改用户信息等功能...

    ========= 项    目   介   绍======== 银行账户管理系统 本项目主要实现用户注册 登录 存.取钱和修改用户信息功能. 用户信息的存储和获取通过集合和IO输入输出流实现. 存钱 ...

  4. php制作简单的用户注册登录

    这里来写一个表详细的php用户注册登录,这里我用的集成是WampServer 数据库的创建要在PHPmyadmin 里面操作. 1.数据库,数据表的创建 这个是随意命名的 可以直接在WampServe ...

  5. 傻瓜式使用SpringSecurity完成前后端分离+JWT+登录认证+权限控制

    流程分析 流程说明: 客户端发起一个请求,进入 Security 过滤器链.当到 LogoutFilter 的时候判断是否是登出路径,如果是登出路径则到 logoutHandler ,如果登出成功则到 ...

  6. Javaweb 实现简单的用户注册登录(含数据库访问功能)

    Javaweb 实现简单的用户注册登录(含数据库访问功能) 实现效果图: 登录界面: 登陆成功: 登陆失败: 注册界面: 注册成功: 1.登录界面login.jsp <%@ page langu ...

  7. 【Web基础】用户注册登录案例

    4,用户注册登录案例 接下来我们通过两个比较常见的案例,一个是 注册,一个是 登录 来对今天学习的内容进行一个实战演练,首先来实现用户登录. 4.1 用户登录 4.1.1 需求分析 用户在登录页面输入 ...

  8. C语言用户注册登录管理系统_JavaFX+SpringBoot+验证码功能的小型薪酬管理系统

    2020.07.22更新 1 概述 1.1 简介 一个简单的小型薪酬管理系统,前端JavaFX+后端Spring Boot,功能倒没多少,主要精力放在了UI和前端的一些逻辑上面,后端其实做得很简单. ...

  9. 手工搭建基于ABP的框架(3) - 登录,权限控制与日志

    为了防止不提供原网址的转载,特在这里加上原文链接: http://www.cnblogs.com/skabyy/p/7695258.html 本篇将实现登录.权限控制.日志配置与审计日志的功能.首先我 ...

最新文章

  1. java表驱动法索引访问_表驱动法 - SegmentFault 思否
  2. python 销量预测模型_如何做电商的销量预测模型?
  3. Ubuntu用apt-get安装报错:E: Could not get lock /var/lib/dpkg/lock-frontend - open (11:资源暂时不可用)
  4. echart参数设置——曲线图
  5. 单片机课程设计数字心率计_光学心率传感器详细使用教程
  6. Cloud for Customer系统里的附件url,可以通过partner编程自己生成么?
  7. java shareable_spring中@Resource和@Autowired理解详解_编程语言_IT虾米网
  8. 四轮定位和四轮动平衡有什么区别?
  9. itextpdf html 样式,将HTML解析为PDF的iText样式
  10. java xlsx怎么转换成excel格式_pdf文件怎么转换成html网页格式?用什么方法来转换?...
  11. 乐橙机器人的价格_乐橙育儿机器人app-大华乐橙机器人app(乐橙宝宝)下载V1.00.001-西西软件下载...
  12. php微信摇一摇,申请开通微信摇一摇
  13. matlab中circle函数_MATLAB如何用自带函数画圆
  14. data mining (foreign blogs)
  15. 关于电影票对接公众号cps
  16. 缺省值和null值的区别和作用
  17. oracle基本建表语句
  18. Python实现AI图像识别-身份证识别
  19. net-java-php-python-高校新生报到管理系统计算机毕业设计程序
  20. 卡巴斯基:一年内手机恶意软件受害者数量增3倍

热门文章

  1. Java源码——一个简单的洗牌(shuffling)程序 (Card shuffling and dealing with Collections method shuffle)
  2. mysql 100w 查询耗时4秒_MySql百万数据0秒筛选查询
  3. 算法设计与分析——排序算法:比较排序算法的下界
  4. C#+GDAL读取影像(1)
  5. 【硬核干货!】不刷面经,还想上岸大厂?AI算法篇(一)
  6. 【Java毕设】基于SpringBoot实现新冠疫情统计系统(Idea+Navicat)
  7. 9、Python xlsxwriter模块
  8. xxl job踩坑记
  9. Latex表格标题左对齐,并且table加粗
  10. 深度优先搜索/广度优先搜索