家校通小程序实战教程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,一经查实,立即删除!

相关文章

Git 使用技巧

1. 查看提交历史 git log 显示所有提交的详细信息 git log --oneline 查看每个版本的简要信息 git log --graph --decorate --all 显示完整提交图&#xff08;带详情&#xff09; ​​​​​​​git log --oneline --graph --all​​​​​​​ 显示分支合并图 git sh…

部署自动清理任务解决ORA-00257: archiver error. Connect internal only, until freed

使用oracle数据库的时候&#xff0c;我们一般都会开启归档&#xff0c;确保数据库的日志连续和和数据安全。但随着数据库的运行&#xff0c;归档文件会越来越多&#xff0c;最终撑满磁盘空间&#xff0c;数据库无法继续归档&#xff0c;出现“ORA-00257: archiver error. Conne…

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;实现音频与…

Vue 的 computed 如何实现接受一个参数

在 Vue 中&#xff0c;computed 属性是基于响应式数据的 getter 方法&#xff0c;它通常用于依赖 Vue 实例的数据来计算一个值。然而&#xff0c;computed 默认是不能接受参数的&#xff0c;因为它是绑定到 Vue 实例的响应式数据的。 不过&#xff0c;如果你需要在 computed 中…

【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示例…

SSM--SpringMVC复习(二)

请求 URL匹配&#xff1a; RequestMapping RequestMapping 负责将请求映射到对应的控制器方法上。 RequestMapping 注解可用于类或方法上。用于类上&#xff0c;表示类中的所有响应请求的方法都以该地址作为父路径。 在整个 Web 项目中&#xff0c;RequestMapping 映射的请求…

Pydantic 数据验证

Pydantic 验证 from datetime import datetime from typing import List, Optional from pydantic import BaseModel, EmailStr, field_validator, ValidationErrordef check_name(v: str) -> str:"""Validator to be used throughout"""if …

LangChain——管道提示词 缓存

管道提示词 管道提示词可以将多个提示组合在一起。当我们想要使用部分提示时&#xff0c;这会很有用。这里可以通过PipelinePrompt来完成。 PipelinePrompt由两部分组成&#xff1a; 最终提示&#xff1a;返回的最终提示&#xff1b;管道提示&#xff1a;元组列表&#xff0c…

eclipse-git项目提示NO-HEAD

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

使用OpenSSL创建CA,并基于CA创建证书

生成CA证书 生成CA证书的私钥 openssl genrsa -out ca.key 4096生成CA证书 openssl req -x509 -new -nodes -sha512 -days 3650 \-subj "/CCN/STBeijing/LBeijing/Oexample/OUPersonal/CNMyPersonal Root CA" \-key ca.key \-out ca.crt生成Server证书 证书通常包…

WPF异步UI交互功能的实现方法

前面的文章我们提及过&#xff0c;异步UI的基础实现。基本思路主要是开启新的UI线程&#xff0c;并通过VisualTarget将UI线程上的Visual(即RootVisual)连接到主线程上的UI上即可渲染显示。 但是&#xff0c;之前的实现访问是没有交互能力的&#xff0c;视觉树上的UI并不能实现…

Cross-Site Scripting(XSS)攻击

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

linux mount nfs开机自动挂载远程目录

要在Linux系统中实现开机自动挂载NFS共享目录&#xff0c;你需要编辑/etc/fstab文件。以下是具体步骤和示例&#xff1a; 确保你的系统已经安装了NFS客户端。如果没有安装&#xff0c;可以使用以下命令安装&#xff1a; sudo apt-install nfs-common 编辑/etc/fstab文件&#…

基于学习的实例匹配方法

文章目录 基于学习的实例匹配方法基于学习的实例匹配方法 大规模知识图谱的实例匹配可视为机器学习的一个二分类问题,因此可以利用知识图谱中丰富的网络结构信息和实例相关的信息来训练一个分类模型,从而实现实例匹配。同时,由于实例的规模较大,在分类之前需要对实例进行分…

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

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

PHP 8.4 重磅发布了

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons&#xff1a;JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram&#xff0c;自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 &#xff1f; 5 IDEA必装的插件&…

android 11添加切换分屏功能

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