编程只是起点
我们的终点是星辰大海

基于人脸识别的课堂考勤系统1.0

设计说明:

软件开发的模式是RESTful API+各客户端(学生端,教师端,管理端)的形式,用户认证使用JWT。
文档规定了后端需要提供的接口、前后端交互的数据格式、数据库的结构以及认证方式。技术栈的选择,客户端的设计等,都有很大的自由度。

系统架构简图:

 

主要工作:

管理端 (技术栈:Jquery,Vue或React)
学生端 (技术栈:微信小程序)
教师端 (技术栈:react-native跨平台app 或 android,ios原生)
人脸识别模块 (图像处理使用opencv,人脸识别使用face_recognition,提供docker image)
后端接口 (Laravel)
美工 (图标设计,形象展示页设计)
运维 (系统架构设计,上线环境搭建)
ps:每人独立完成一个端,有余力可以选择第二个端,最终软件使用较优秀的端进行组合。

用户认证:

为保护接口不被攻击和恶意利用,服务器会对每次请求进行验证。

首先,管理端和教师端需要将用户名和密码发送给服务器。
登录接口 POST https://face.keinx.com/login

学生端需要将登录凭证(code)发送给服务器。
登录接口 POST https://face.keinx.com/login

服务器收到请求后判断请求者的身份。如果是admin用户,服务器核对用户名和密码,核对成功后将用户id作为jwt的载荷role_id的值,然后将载荷与头部分别进行Base64编码拼接后签名,形成一个JWT。

如果是student用户,服务器将携带AppID、AppSecret和code请求微信服务器,如请求成功微信服务器返回

服务器拿到openid后,根据openid新建一个用户,然后将openid的值作为jwt的载荷role_id的值,形成一个JWT。

JWT未编码前的结构为:

接下来服务器将jwt字符串作为该登录请求响应Cookie返回给用户,Cookie的键为jwt,值为xx.xx.xx形式的jwt字符串。
Cookie失效或者被删除前,以后的每次请求服务器都会接收到客户端携带的jwt信息,服务端会验证jwt的合法性(jwt字符串是否被篡改,jwt是否已过期),验证失败服务端返回401状态码,客户端可引导用户进入认证的界面。

验证成功后则检测用户是否有操作权限,角色及角色权限如下:
学生: class[GET]、image[POST]、student[GET/PUT]

以student[GET/PUT]为例,student为角色被允许操作的资源,[GET/PUT]中为被允许的方法

教师: face[POST]、class[GET]、image[POST]、login[POST/DELETE]、student[GET/POST/PATCH]、course[GET]、arrive_record[GET/POST/PATCH]
普通管理员: class[GET/POST/DELETE/PATCH]、college[GET/POST/DELETE/PATCH]、grade[GET]login[POST/DELETE]student[GET/POST/PATCH/DELETE]、course[GET/POST/PATCH/DELETE]、arrive_record[GET/POST/PATCH]
超级管理员: class[GET/POST/DELETE/PATCH]、college[GET/POST/DELETE/PATCH]、grade[GET]、login[POST/DELETE]、student[GET/POST/PATCH/DELETE]、course[GET/POST/PATCH/DELETE]、arrive_record[GET/POST/PATCH]、admin[GET/POST/PATCH/DELETE]
如果没有权限则返回403状态码。如果认证成功,服务器将返回相应资源。

ps:
服务器端Cookie要设置HttpOnly属性来防止Xss,设置Access-Control-Allow-Credentials: true等等允许cookie跨域。
微信小程序未支持Cookie,手机app关闭后cookie会失效,所以学生端和教师端的过程是提取出header头中set-cookie中的jwt,做本地存储,在以后每次请求的header中添加cookie字段并且带上的jwt=xxx.xxx.xxx
管理端是在浏览器上的,原生支持Cookie,只需要ajax请求中设置xhr.withCredentials = true使浏览器携带跨域Cookie

状态码和错误处理:

软件中主要使用以下状态码

200 OK – [GET]:服务器成功返回用户请求的数据。
201 CREATED – [POST/PUT/PATCH]:用户新建或修改数据成功。
202 Accepted – [ * ]:表示一个请求已经进入后台排队(异步任务)
204 NO CONTENT – [DELETE]:用户删除数据成功。
400 INVALID REQUEST – [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作。
401 Unauthorized – [ * ]:表示用户未通过认证(令牌、用户名、密码错误)。
403 Forbidden – [ * ] 表示用户通过认证,但是没有访问该资源的权限。
404 NOT FOUND – [ * ]:用户发出的请求针对的是不存在的记录,服务器没有进行操作。
500 INTERNAL SERVER ERROR – [ * ]:服务器发生错误,用户将无法判断发出的请求是否成功。

如果状态码非2xx,服务端会向客户端返回出错信息。返回的信息中error作为键名,键值为错误信息。

 

提供一下接口:

学生管理

新建图片 POST https://face.keinx.com/image

修改学生信息1 PUT https://face.keinx.com/student/ID
修改学生信息2(学生端使用) PUT https://face.keinx.com/student

查询学生信息 GET https://face.keinx.com/student/ID
查询学生信息2(根据小程序openid查询) GET https://face.keinx.com/student

删除学生信息 DELETE https://face.keinx.com/student/ID

查询某班全部学生信息 GET https://face.keinx.com/student/class/ID

课程查询

查询当前时间点对应课程的信息 GET https://face.keinx.com/course/teacher/ID/now_time

查询某堂课的信息 GET https://face.keinx.com/course/ID

查询某教师课程表 GET https://face.keinx.com/course/teacher/ID

考勤管理

新建图片 POST https://face.keinx.com/image

照片中人脸(多张)身份识别 POST https://face.keinx.com/face

增加考勤记录 POST https://face.keinx.com/arrive_record

修改考勤记录 PATCH https://face.keinx.com/arrive_record/ID

查询考勤记录(获取某学生某年某月的所有记录) GET https://face.keinx.com/arrive_record/student/ID/year/2017/month/2

查询考勤记录2(某课堂所有记录) GET https://face.keinx.com/arrive_record/course/ID

院系和班级管理

添加院系 POST https://face.keinx.com/college

删除院系(增加逻辑上的外键约束,如果子表有数据,则不允许直接删除父表的值)DELETE https://face.keinx.com/college/ID

修改院系 PATCH https://face.keinx.com/college/ID

查询院系 GET https://face.keinx.com/college/ID

添加班级 POST https://face.keinx.com/class/college/ID

删除班级 DELETE https://face.keinx.com/class/ID

修改班级 PATCH https://face.keinx.com/class/ID

查询班级 GET https://face.keinx.com/class/ID

获取所有院系 GET https://face.keinx.com/college

获取所有年级 GET https://face.keinx.com/grade

获取班级1(根据年份获取院系和班级的关联列表) GET https://face.keinx.com/class/grade/2017

获取班级2(根据年份和学院ID获取某学院的班级)GET https://face.keinx.com/class/grade/2017/college/ID

账号管理

账号添加 POST https://face.keinx.com/admin

账号删除 DELETE https://face.keinx.com/admin/ID

账号修改 PATCH https://face.keinx.com/admin/ID

账号查询 GET https://face.keinx.com/admin/ID

账号查询2(根据角色查询) GET https://face.keinx.com/admin/role/1

课程管理

添加课程 POST https://face.keinx.com/course

删除课程 DELETE https://face.keinx.com/course/ID

修改课程 PATCH https://face.keinx.com/course/ID

程序版本:

Php版本7.1.7 laravel版本5.5
python版本3.6,flask版本1.0.2
mysql 5.7
vue 版本2.9.5
react-native版本 0.56

本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可 »钟声博客 » 基于人脸识别的课堂考勤系统1.0

相关推荐

  • 记一次羊毛-小猿搜题
  • x网站劫持分析
  • 密码保护:XX学院渗透笔记(一)
  • 加v认证-wordpress插件
  • 使博客在qq中全屏打开

评论 2

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    接口写的不错

    张煊 2个月前 (09-05)回复
    • 接口都设计的很烂额…修改好多次后接口才勉强能用
      做其他端的同学也都是新手,经验不足,很多地方的体验感都不行
      加上服务器性能不足,,最后做出的东西体验感极差

      钟声 2个月前 (09-05)

我的简书友情链接