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

目录

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

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

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

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

1 创建数据源

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

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

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

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

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

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

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

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

2 搭建后台功能

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

3 生成口令

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

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

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

function createPassword(){const length = 6const 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.classidconst 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 = 6const 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.mzph.cn/pingmian/62058.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch中的节点(比如共20个),其中的10个选了一个master,另外10个选了另一个master,怎么办?

大家好&#xff0c;我是锋哥。今天分享关于【Elasticsearch中的节点&#xff08;比如共20个&#xff09;&#xff0c;其中的10个选了一个master&#xff0c;另外10个选了另一个master&#xff0c;怎么办&#xff1f;】面试题。希望对大家有帮助&#xff1b; Elasticsearch中的节…

阿里发布 EchoMimicV2 :从数字脸扩展到数字人 可以通过图片+音频生成半身动画视频

EchoMimicV2 是由阿里蚂蚁集团推出的开源数字人项目&#xff0c;旨在生成高质量的数字人半身动画视频。以下是该项目的简介&#xff1a; 主要功能&#xff1a; 音频驱动的动画生成&#xff1a;EchoMimicV2 能够使用音频剪辑驱动人物的面部表情和身体动作&#xff0c;实现音频与…

【NLP高频面题 - 分布式训练】ZeRO1、ZeRO2、ZeRO3分别做了哪些优化?

【NLP高频面题 - 分布式训练】ZeRO1、ZeRO2、ZeRO3分别做了哪些优化&#xff1f; 重要性&#xff1a;★★ NLP Github 项目&#xff1a; NLP 项目实践&#xff1a;fasterai/nlp-project-practice 介绍&#xff1a;该仓库围绕着 NLP 任务模型的设计、训练、优化、部署和应用&am…

C#基础控制台程序

11.有一个54的矩阵&#xff0c;要求编程序求出其中值最大的那个元素的值&#xff0c;以及其所在的行号和列号。 12.从键盘输入一行字符&#xff0c;统计其中有多少个单词&#xff0c;单词之间用空格分隔开。 13.输入一个数&#xff0c;判断它是奇数还是偶数&#xff0c;如果…

三六零[601360]行情数据接口

1、三六零&#xff1a;实时行情 Restful API # 测试接口&#xff1a;可以复制到浏览器打开 https://tsanghi.com/api/fin/stock/XSHG/realtime?tokendemo&ticker601360获取股票实时行情&#xff08;开、高、低、收、量&#xff09;。 请求方式&#xff1a;GET。 Python示例…

eclipse-git项目提示NO-HEAD

1、出现该问题的过程 本人在用eclipse拉取git代码&#xff0c;刚拉取完&#xff0c;可能还没来得及跟本地的分支合并&#xff0c;电脑就卡动了。无奈只能重启电脑&#xff0c;打开eclipse&#xff0c;maven项目后面就出现了xxx NO-HEAD的提示。 2、问题解决 根据错误提示&am…

Cross-Site Scripting(XSS)攻击

简介 XSS&#xff08;跨站脚本攻击&#xff09;是一种常见的 Web 安全漏洞&#xff0c;攻击者通过在目标网站的输入框中注入恶意脚本&#xff0c;当其他用户&#xff08;如管理员&#xff09;查看包含恶意脚本的页面时&#xff0c;脚本会在他们的浏览器中执行。XSS 攻击可以分…

uniapp中使用uni-forms实现表单管理,验证表单

前言 uni-forms 是一个用于表单管理的组件。它提供了一种简化和统一的方式来处理表单数据&#xff0c;包括表单验证、字段绑定和提交逻辑等。使用 uni-forms可以方便地创建各种类型的表单&#xff0c;支持数据双向绑定&#xff0c;可以与其他组件及API进行良好的集成。开发者可…

android 11添加切换分屏功能

引言 自Android 7开始官方就支持分屏显示,但没有切换分屏的功能,即交换上下屏幕。直到Android 13开始才支持切换分屏,操作方式是:分屏模式下双击中间分割线就会交换上下屏位置。本文的目的就是在Android 11上实现切换分屏的功能。 下图是Android13切换分屏演示 切换分屏…

springboot项目使用maven打包,第三方jar问题

springboot项目使用maven package打包为可执行jar后&#xff0c;第三方jar会被打包进去吗&#xff1f; 答案是肯定的。做了实验如下&#xff1a; 第三方jar的项目结构及jar包结构如下&#xff1a;&#xff08;该第三方jar采用的是maven工程&#xff0c;打包为普通jar&#xf…

13 —— 开发环境调错-source map

问题&#xff1a;代码被压缩后&#xff0c;无法正确定位源代码的位置&#xff08;行数和列数&#xff09; source map&#xff1a;准确追踪error和warning在原始代码的位置 —— webpack.config.js配置devtool选项 module.exports { devtool: inline-source-map }; inline-s…

数据结构(ArrayList顺序表)

一、引言 1.什么是顺序表 定义&#xff1a; 顺序表是一种基于阵列实现的线性表结构&#xff0c;用连续的存储空间保存表中的数据元素&#xff0c;并按顺序排列。 底层依赖阵列&#xff0c;支持随机访问。元素之间没有额外的连接信息&#xff0c;如指针或链表节点。通过动态扩容…

HTTPS的单向认证和双向认证是什么?有什么区别?

目录标题 单向认证流程双向认证流程区别 单向认证流程 HTTPS单向认证‌是指只有服务器向客户端证明其身份。在这种认证方式中&#xff0c;服务器会向客户端发送一个由可信证书颁发机构&#xff08;CA&#xff09;签发的SSL证书&#xff0c;客户端会验证这个证书以确保服务器的…

Python语法基础(一)

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 关键字参数和不定长参数 关键字参数主要体现在函数的调用上 使用关键字参数的好处是&#xff0c;可以不按照形参的参数传参 比如说&#xff0c;我们定义一个函数 def c1(nam…

音视频技术扫盲之预测编码的基本原理探究

预测编码是一种数据压缩技术&#xff0c;广泛应用于图像、视频和音频编码等领域。其基本原理是利用数据的相关性&#xff0c;通过对当前数据的预测和实际值与预测值之间的差值进行编码&#xff0c;从而实现数据压缩的目的。 一、预测编码的基本概念 预测编码主要包括预测器和…

Android BottomNavigationView 底部导航栏使用详解

一、BottomNavigationView简介 BottomNavigationView是官方提供可以实现底部导航的组件&#xff0c;最多支持5个item&#xff0c;主要用于功能模块间的切换&#xff0c;默认会包含动画效果。 官方介绍地址&#xff1a;BottomNavigationView 二、使用BottomNavigationView a…

【大数据学习 | Spark-Core】Spark提交及运行流程

spark的集群运行结构 我们要选择第一种使用方式 命令组成结构 spark-submit [选项] jar包 参数 standalone集群能够使用的选项。 --master MASTER_URL #集群地址 --class class_name #jar包中的类 --executor-memory MEM #executor的内存 --executor-cores NUM # executor的…

React中事件处理和合成事件:理解与使用

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

[241125] X-CMD 发布 v0.4.14:webtop-Linux 容器桌面;支持 PowerShell 环境;轻松搭建并测试蜜罐环境等

目录 X-CMD 发布 v0.4.14&#x1f4c3;Changelog&#x1f427; webtop -- Linux 桌面容器&#x1f5a5;️ pwsh&#x1f4bb; elv|fish|nu|onsh|tcsh&#x1f40b; endlessh&#x1f40b; cowrie&#x1f4f2; mosh&#x1f4bb; mac -- Mac 实用功能&#x1f386; ascii&#…

Jmeter中的测试片段和非测试原件

1&#xff09;测试片段 1--测试片段 功能特点 重用性&#xff1a;将常用的测试元素组合成一个测试片段&#xff0c;便于在多个线程组中重用。模块化&#xff1a;提高测试计划的模块化程度&#xff0c;使测试计划更易于管理和维护。灵活性&#xff1a;可以通过模块控制器灵活地…