nuxt3模拟手机验证码

文章目录

      • 前言
      • 前端
      • 后端
      • 前面代码会出现的问题
      • 约束button的小插件
      • 连接mongodb来写
      • 登陆
      • 项目开源链接

前言

真实应该要连接短信验证码服务,但是众所周知所有的服务和IT都是靠服务来挣钱的,所以我们目前只能模拟手机验证码登陆

考虑到账号的唯一值就想到了手机和验证码(基本上的网站都会使用)但是输入手机号后有"获取验证码"的操作,这个操作就是需要供应商支持(交钱)但是身无分文的我又没有像别人一样有收入来源所以我这里模拟的手机注册登陆的效果共大家做参考。

里面还有nuxt使用qrcode的方法,大家可以看看

前端

需要安装

yarn add nuxt-mongodb
yarn add --dev @types/mongodb
#生成二维码的依赖
yarn add qcode
<!--app.vue-->
<script setup lang="ts">
import Qrcode from 'qrcode.vue';
import ysn_kt from "./public/images/ysn_kt.png"
import type { Reactive } from 'vue';const qrcodeRef = ref(null)interface phoneInter {phone:string,//手机号can:string,//验证码
}const phoneReactive:Reactive<phoneInter> = reactive({phone:"",can:""
})//是否显示登陆页
const isLoginShow = ref(false)
//扫码配置
const qrcodeValue = ref("hello world") //扫码后里面的信息
const qrcodeSize = ref(200) //二维码的大小
const qrcodeColor = ref("#09fff7") //二维码的颜色
const qrcodeBack = ref("#ffffff")//二维码的背景颜色
const logoMargin = 5 // Logo 边距
const logoScale = 0.2 // Logo 缩放比例//打开登陆
function goToLogin(){isLoginShow.value = true// new Qrcode('')
}
//关闭登陆
function closeLogin(){isLoginShow.value = false
}//发送验证码
async function postSubCan(){fetch('/api/getPhone',{method: 'POST',body: JSON.stringify(phoneReactive),headers:{'Content-Type': 'application/json'}}).then(async res =>{return res.json()}).then(async(data:any) => {console.log(data)//弹出验证码alert(`你的验证码是:${data.message.can}`)}).catch(err=>console.log(err))
}//注册用户
function postRegisterUser(){fetch('/api/registerUser',{method:'POST',body:JSON.stringify(phoneReactive),headers:{'Context-Type':"application/json"}}).then(async res =>{return res.json()}).then(async(data:any) => {console.log(data)}).catch(err=>console.log(err))
}
</script><template><!-- 登陆页面 --><div ref="loginRef" v-if="isLoginShow" class="loginClass"><div class="masterBox"><div @click="closeLogin()" class="closeBtn">关闭</div><div class="scanNameTitle">扫码登陆</div><div class="qrcodeClass"><qrcode :value="qrcodeValue" :foreground="qrcodeColor":margin="1":logo-src="ysn_kt" :logo-scale="logoScale":logo-margin="logoMargin":size="qrcodeSize" class="qrcodeMaster" ref="qrcodeRef"/><div class="phoneRegNameTitle">手机注册</div><div class="phoneRegMaster"><input type="text" v-model="phoneReactive.phone" placeholder="手机号" /><input type="text" v-model="phoneReactive.can" placeholder="验证码" /><button @click="postSubCan">发送验证码</button><br /><button @click="postRegisterUser">注册</button></div></div></div></div><!-- 主页 --><div class=""><nuxt-link to="/" class="">首页</nuxt-link><nuxt-link to="/">测试</nuxt-link><span @click="goToLogin()" class="loginBtn">登录</span></div><div><nuxt-page></nuxt-page></div>
</template><style scoped>
/*样式,可以自定义*/
.loginClass{position: absolute;left: 0;top: 0;width: calc(100%);height: calc(100%);background: rgba(0, 0, 0, .3);z-index: 999;display: flex;align-items: center;justify-content: center;
}
.loginBtn{user-select: none;cursor: pointer;
}
.masterBox{width: 70%;height: 70%;background: rgba(255, 255, 255, 1);border-radius: 10px;
}
.closeBtn{position: absolute;right: calc(20%);top: calc(20%);user-select: none;cursor: pointer;
}
.qrcodeClass{position: relative;left: 100px;top: 200px;width: 200px;height: 200px;/* background: rgba(0, 255, 200, 1); */
}
.qrcodeMaster{border: 2px solid #09fff7; /* 添加边框 */padding: 10px; /* 添加内边距 */border-radius: 15px;
}
.scanNameTitle{position: absolute;left: 26%;top: 30%;font-size: calc(20px);
}
/* 注册样式 */
.phoneRegNameTitle{position: absolute;left: 190%;top: -40%;width: 40%;font-size: 20px;
}
.phoneRegMaster{position: absolute;left: 150%;top: -5%;width: 150%;height: 100%;/* background: rgba(255, 100, 100, 1); */display: flex;align-items: center;justify-content: center;
}
</style>

后端

/server/api/getPhone.ts

// server/api/getPhone.ts (模拟获取验证码服务)
//接口
interface phoneInter {phone:string,can:string,//验证码
}//随机浮点数
function getRandomFloatInRange(min: number, max: number): number {return Math.random() * (max - min) + min;
}
//随机四位整数
function getRandomFourDigitInt(): number {return Math.floor(Math.random() * (9999 - 1000 + 1)) + 1000;
}//导出can信息
export let canMes:number = 0//只有注册账号才能使用(模拟手机短信发送(因为真正的短信发送要钱))
export default defineEventHandler(async(event:any)=><

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/52782.shtml

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

相关文章

Netflix Feign:微服务HTTP调用如何简化?

Netflix Feign&#xff1a;微服务HTTP调用如何简化&#xff1f; 1、什么是Netflix Feign&#xff1f;2、Feign的优点3、示例4、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、什么是Netflix Feign&#xff1f; Feign是一个声明式的…

备考AMC10美国数学竞赛2024:吃透1250道真题和知识点(持续)

有什么含金量比较高的初中生数学竞赛吗&#xff1f;美国数学竞赛AMC10是个不错的选择。那么&#xff0c;如何备考AMC10美国数学竞赛呢&#xff1f;做真题&#xff0c;吃透真题和背后的知识点是备考AMC8、AMC10有效的方法之一。 通过做真题&#xff0c;可以帮助孩子找到真实竞赛…

新安装的mariadb 对应的my.cnf 对应的配置

最近在安装openstack&#xff0c;在启动mariadb的时候出现了问题&#xff0c;一直无法启动 看了一个博客说各种原因&#xff0c;尝试了也没有用 看来只有重新安装了&#xff0c; 原来的都删除了&#xff0c;把my.cnf 删除了 后来重新安装的话&#xff0c;执行&#xff1a; …

【智能排班系统】Hibernate Validator 参数校验

&#x1f3af;导读&#xff1a;本文档介绍了参数校验的重要性及其在软件开发中的作用&#xff0c;强调了数据完整性、安全性、用户体验、系统稳定性及开发效率等方面的关键价值。文档详细阐述了Hibernate Validator这一流行的Java验证框架的使用方法&#xff0c;展示了如何利用…

异业联盟的巅峰之作!某店生活 两年百亿销售额!

大家好 我是一家软件开发公司的产品经理 吴军 最近有个爆火的商业模式 带动了三方消费 平台能赚到钱 消费者能省钱 商家也能获取到客源甚至还能赚钱 他究竟是怎么样做到三方都赚到钱的&#xff1f; 在当前经济形势下&#xff0c;许多消费者变得谨慎&#xff0c;减少了不必…

【K8s】专题十二(4):Kubernetes 存储之 StorageClass

本文内容均来自个人笔记并重新梳理&#xff0c;如有错误欢迎指正&#xff01; 如果对您有帮助&#xff0c;烦请点赞、关注、转发、订阅专栏&#xff01; 专栏订阅入口 Linux 专栏 | Docker 专栏 | Kubernetes 专栏 往期精彩文章 【Docker】&#xff08;全网首发&#xff09;Kyl…

Git之2.5版本重要特性及用法实例(五十七)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者. 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列…

Debezium日常分享系列之:Debezium 3.0.0.Beta发布

Debezium日常分享系列之&#xff1a;Debezium 3.0.0.Beta发布 一、重大变更Debezium Server Kafka SinkDebezium Server RabbitMQ Sink 二、新功能和改进每个表的详细指标PostgreSQL复制插槽创建超时对于PostgreSQL的PgVector数据类型的支持Oracle Ehcache 事务缓冲实现解码Pos…

滑动窗口元素的平均值 ← STL : deque

【题目描述】 给定一个序列&#xff0c;使用 deque 维护一个大小为 k 的窗口&#xff0c;计算每个窗口中所有元素的平均值。【算法分析】 ● STL deque&#xff1a;https://cplusplus.com/reference/deque/● 在 C 标准模板库&#xff08;STL&#xff09;中&#xff0c;deque&a…

VSCode+debugpy远程调试

某一天突然发现VSCode没法远程调试了&#xff0c;原因竟是新版本的VSCode Python调试不再支持ptvsd插件了&#xff0c;所以只能改换门庭接入debugpy。 首先launch.json并无差异&#xff0c;还是和之前用ptvsd时候一样。 {"version": "0.2.0","config…

【架构设计】安全架构设计

安全架构概述 在当今以计算机、网络和软件为载体的数字化服务几乎成为人类社会赖以生存的手段&#xff0c;与之而来的计算机犯罪呈现指数上升趋势&#xff0c;因此&#xff0c;信息的可用性、完整性、机密性、可控性和不可抵赖性等安全保障有位重要&#xff0c;为满足这些诉求&…

【测试】——开发模型与测试模型

&#x1f4d6; 前言&#xff1a;在软件开发过程中&#xff0c;理解和应用合适的开发模型与测试模型至关重要。本文将详细介绍几种常见的开发模型&#xff0c;如瀑布模型、螺旋模型、增量模型和敏捷过程&#xff0c;以及测试模型如V模型和W模型。 目录 &#x1f552; 1. 开发模型…

Java—可变参数、不可变集合

目录 可变参数 不可变集合 可变参数 Java5 中提供了可变参数&#xff0c;可变参数是一种特殊形参&#xff0c;定义在方法、构造器的形参列表中。 可变参数格式&#xff1a;属性类型...参数名称可变参数示例&#xff1a;int...args 可变参数传参特点 1. 可以不传参数&#…

Nginx: 使用KeepAlived配置实现虚IP在多服务器节点漂移及Nginx高可用原理

使用KeepAlived配置实现虚IP在多服务器节点漂移 1 &#xff09;环境准备 2台 linux , 一主一备 节点1&#xff1a;192.168.184.30 CentOS 7 Master节点2&#xff1a;192.168.184.40 CentOS 7 BackupVIP 192.168.184.50 安装 KeepAlived, $ yum install keepalived 注意&#x…

时空图卷积网络:用于交通流量预测的深度学习框架-1

摘要 准确的交通预测对于城市交通控制和引导至关重要。由于交通流的高度非线性和复杂性&#xff0c;传统方法无法满足中长期预测任务的需求&#xff0c;且往往忽略了空间和时间的依赖关系。本文提出一种新的深度学习框架——时空图卷积网络(STGCN)来解决交通领域的时间序列预测…

云同步的使用

云同步技术是一种在多个设备或系统之间保持数据一致性的技术&#xff0c;它通常依赖于云存储服务来实现。在Java中&#xff0c;实现云同步功能通常需要与云服务提供商的API进行交互&#xff0c;如Amazon S3、Google Cloud Storage、Microsoft Azure Blob Storage等。 以下是一个…

golang gin template模板渲染

1、根据值控制html元素显示隐藏 main.go package main import ("html/template""net/http""github.com/gin-gonic/gin" ) func main() {r : gin.Default()r.SetFuncMap(template.FuncMap{"greaterThan": func(a, b int) bool {retur…

如何利用chatgpt的提升代码能力

目录 1. 在用python绘图的时候,总是花的时间较长,需要将这些绘图的代码花费时间都记下来吗?还是进行总结、提炼到笔记中,需要的时候复制粘贴并改写?1. 记录与总结并行进行2. 模块化代码3. 性能优化4. 工具与自动化5. 笔记整理6. 复制粘贴与调整2. 利用python进行数据分析的…

PyCharm 自定义字体大小

常用编程软件自定义字体大全首页 文章目录 前言具体操作1. 打开设置对话框2. 设置编辑器字体3. 选择外观字体 前言 PyCharm 自定义字体大小&#xff0c;统一设置为 JetBrains Mono 具体操作 【File】>【Settings...】>【Editor】>【Font】 统一设置为字体样式 JetB…

人工智能训练师工作内容及职业发展路径

人工智能训练师&#xff08;AI Trainer&#xff09;是一种专业职位&#xff0c;主要负责训练和优化人工智能系统&#xff0c;尤其是机器学习模型。他们的工作涉及到以下几个方面&#xff1a; 1、数据准备&#xff1a;训练师需要收集、清洗和预处理数据&#xff0c;以确保数据的…