当前位置: 首页 > article >正文

家校通小程序实战教程02口令管理

目录

  • 1 创建数据源
  • 2 搭建后台功能
  • 3 生成口令
  • 4 调用API
  • 总结

我们的小程序上线之后,必然面临家长要加入的问题。微搭有登录验证的功能,但是手机验证的机制是,如果你未注册就给你自动注册一个账号,如果以注册了收到验证码就可以登录系统。

这种机制的弊端是,只要打开小程序,输入手机号就可以加入,这样就导致会有不是该班级的家长加入。

为了避免这种问题,在家长加入之前,我们要求家长输入班级口令,比对通过才可以加入。本篇我们就讲解一下口令如何创建、如何分发、如何验证。

1 创建数据源

在设计口令的时候,我们有两种方案,一种是直接在班级表添加一列,来填写我们的口令。家长加入的时候直接根据所在班级的字段进行比对,这样验证比较快速。

这种方案的问题是后续要让口令作废,新添加口令就不太方便。

第二种方案是要加一张口令表,每次生成口令的时候添加一条数据,还可以设置口令的状态,有效、失效。这种方案的好处是万一口令被泄露了,还可以及时禁用。缺点呢就是多了一张表,在查询的时候需要额外去口令表获取数据。

但是出于数据安全的角度,我们还是选择使用单独写表的方案。

点击云数据库,点击+号创建口令表
在这里插入图片描述
在这里插入图片描述
输入数据模型的名称班级口令表
在这里插入图片描述
点击添加字段,输入班级口令,类型选择文本
在这里插入图片描述
继续添加字段,输入口令状态,类型选择枚举
在这里插入图片描述
点击立即创建,创建枚举类型,选项包含有效、失效
在这里插入图片描述
继续添加字段,填写班级,数据类型选择关联关系(新),关联模型选择班级,班级表内字段填写班级口令关联,班级表内字段标识用拼音的首字母就可以,填写bjklgl,关联类型选择多对一
在这里插入图片描述
这里为什么要选择多对一,你可以想一下谁是一的一方,一的一方表示主表,主表通常都是唯一的不允许有重复记录。我们的班级表就是这种特点,一个学校不可能有两个一年级五班

多的一方表示子表,子表表示记录可以重复,比如我们的口令,我们一个班级可以设置多个口令,但是只有一个口令有效

在这块选择关系的地方是特别迷惑的地方,该选哪个你就按照我提供的这个思路自己问一下,一问就会有答案

填写好字段之后,就可以设置数据的权限
在这里插入图片描述

2 搭建后台功能

数据源设置好了之后,我们就可以搭建后台功能了。打开我们的后台应用,点击创建页面
在这里插入图片描述
选择表格与表单模板,数据模型选择班级口令表,页面布局选择左侧导航布局
在这里插入图片描述
创建好页面之后,我们需要在班级管理列表的操作列上增加一个口令的按钮,切换到班级列表,选中数据表格组件
在这里插入图片描述
修改按钮的名字,改成口令,类型选择链接
在这里插入图片描述
在点击口令的时候,我们需要打开班级口令的列表,需要传入一个班级的id信息。切换到班级口令列表页面,选中页面组件,在右侧的页面URL参数,添加一个classid
在这里插入图片描述
在这里插入图片描述
然后选中数据表格组件,设置数据筛选条件
在这里插入图片描述
设置查询条件为班级等于我们的URL参数
在这里插入图片描述
回到班级列表页面,给口令按钮设置点击事件
在这里插入图片描述
选择打开页面
在这里插入图片描述
选择我们的班级口令列表,classid传入表格行的数据标识
在这里插入图片描述
在这里插入图片描述

3 生成口令

口令的话我们是准备生成六位的随机数,这个需要编写API来实现。API是我们低代码的后端,可以按照云开发的语法进行编制。

我们生成口令的方案是,先随机生成一个六位的数字,然后给班级口令表写入一条数据,在写入时需要传入班级标识

点击侧边栏的API,点击+号创建API
在这里插入图片描述
选择自定义代码
在这里插入图片描述
填写方法的名称和标识
在这里插入图片描述
修改方法的名称和标识
在这里插入图片描述
点击添加入参,输入classid
在这里插入图片描述
在编辑器中输入如下代码:

function createPassword(){
  const length = 6
  const characters = '0123456789';
    let password = '';
    for (let i = 0; i < length; i++) {
      const randomIndex = Math.floor(Math.random() * characters.length);
      password += characters[randomIndex];
    }
    return password;
}
module.exports = async function (params, context) {
  const classid = params.classid
  const password = createPassword()
  const result = await context.callModel({
    name: 'bjklb', // 数据模型标识,可以前往「数据源 - 数据模型」列表页查看
    methodName: 'wedaCreateV2', // 数据模型方法标识,支持的方法可以前往「数据源 - 数据模型」的任一数据模型详情页查看当前模型支持的方法
    params: {
      data:{
        bj:{_id:classid},
        bjkl:password,
        klzt:"1"
      }
    }, // 数据模型方法的入参
  });
  // 这里返回数据,和出参结构映射
  return {password,result};
};

这里我们解读一下这个代码,module.exports这个是模块的导出语法,等号右边就是我们导出的函数,有两个入参,分别是params和context

module.exports = async function (params, context) {

params对应着我们在上边通过界面添加的入参,这里我们只有一个入参是班级标识

context相当于是API的上下文环境,这里可以通过调用callModel方法给数据源写入一条数据

const classid = params.classid

这个地方我们定义了一个常量,用赋值语句将入参的classid赋值给我们的常量

const password = createPassword()

这个我们定义了一个常量用来接收我们随机生成的六位口令

function createPassword(){
  const length = 6
  const characters = '0123456789';
    let password = '';
    for (let i = 0; i < length; i++) {
      const randomIndex = Math.floor(Math.random() * characters.length);
      password += characters[randomIndex];
    }
    return password;
}

这里我们调用了工具类Math的随机数方法random,这样帮我们生成一个随机的六位数字

const result = await context.callModel({
    name: 'bjklb', // 数据模型标识,可以前往「数据源 - 数据模型」列表页查看
    methodName: 'wedaCreateV2', // 数据模型方法标识,支持的方法可以前往「数据源 - 数据模型」的任一数据模型详情页查看当前模型支持的方法
    params: {
      data:{
        bj:{_id:classid},
        bjkl:password,
        klzt:"1"
      }
    }, // 数据模型方法的入参
  });

这里是调用了微搭的后端API,调用了数据源的创建单条方法,里边有几个参数要传递,name是我们的数据源的标识,切换到云数据库,找到对应的标识进行粘贴
在这里插入图片描述
methodName相当于调用哪个方法,这里我们调用的是单条写入,方法名称可以从官方文档里找

https://cloud.tencent.com/document/product/1301/96166#.E6.96.B0.E5.A2.9E.EF.BC.88wedacreatev2.EF.BC.89

在这里插入图片描述
params里的data就是我们需要写入的数据,左边的键是对应数据源的字段,右边的值根据实际情况传入

在这里插入图片描述
在传入值的时候要结合字段的类型,比如我们的班级字段,本身是一个对象类型,里边的键是_id表示要传入数据标识

代码写好了之后就需要测试,点击右侧的方法测试,传入入参,入参可以从云数据库粘贴数据的数据标识字段
在这里插入图片描述
在这里插入图片描述
运行测试之后我们可以看到返回的结果,点击出参映射就完成了API的编写
在这里插入图片描述

4 调用API

API编写好之后需要界面上调用,回到我们的班级口令列表页面,点击新建按钮,将原来的方法改为调用数据源方法
在这里插入图片描述
点击fx传入我们的URL参数
在这里插入图片描述
写入成功后跟一个表格刷新的事件
在这里插入图片描述
点击一下生成口令,我们的口令就自动写入到表里了
在这里插入图片描述

总结

我们本篇介绍了一下口令生成的方案,互联网应用上线之后尤其要考虑数据安全的问题,我们通常都是通过这种加一层验证机制去解决。


http://www.kler.cn/a/415791.html

相关文章:

  • docker使用(镜像、容器)
  • docker compose 快速搭建 Elasticsearch 单节点测试环境
  • 深入理解 Docker 在 CI/CD 流程中的应用原理
  • 内核模块里获取当前进程和父进程的cmdline的方法及注意事项,涉及父子进程管理,和rcu的初步介绍
  • 【Leetcode 每日一题 - 补卡】3259. 超级饮料的最大强化能量
  • React中高阶组件HOC详解
  • 【SCT61240QFJCR】用于超小型汽车摄像头模块的四通道电源管理IC,国产 车规
  • Git 提交代码日志信息
  • C语言第15讲:C语言内存函数
  • shell第二次作业
  • 程成本控制系统如何跟工程现场管理结合起来?
  • 【Unity-如何提高物理引擎的高精度模拟】
  • 【Python爬虫实战】深入解析 Scrapy:从阻塞与非阻塞到高效爬取的实战指南
  • [Python/网络安全] Git漏洞之Githack工具基本安装及使用详析
  • Pytorch使用手册-使用 TensorBoard 可视化模型、数据和训练过程(专题十)
  • JVM 性能调优 -- JVM常用调优工具【jps、jstack、jmap、jstats 命令】
  • 如何选择黑白相机和彩色相机
  • GAN是一种自监督模型那在判别器中,同时输入生成器生成的SR与真实值HR作比较的话,不就是将HR作为SR的标签吗,如何体现自监督学习呢
  • YOLOv11融合Inner-IoU及相关改进思路
  • I/O流综合练习题
  • 摄影相关常用名词
  • springboot343大学生选修选课系统的设计与实现(论文+源码)_kaic
  • 物联网环境中NDN协议的性能比较分析
  • CQ 社区版 2024.11 | 新增“审批人组”概念、可通过SQL模式自定义审计图表……
  • 详解登录MySQL时出现SSL connection error: unknown error number错误
  • 网络安全、Web安全、渗透测试之笔经面经总结(三)