node中短信api实现验证码登录的示例代码


Posted in Javascript onJanuary 20, 2021

1. node服务器搭建+数据库的连接

此处操作比较简洁易懂,可参考:node服务器快速搭建

2. 短信api的使用

对于短信api ,此处以 阿里云的短信服务为例(只要是有短信服务的平台皆可使用)

2.1 登录平台进行参数配置

1. 进入短信控制台,对要发送的短信格式进行配置,如果没有签名,需要申请签名后操作

node中短信api实现验证码登录的示例代码

2. 点击查看 API Demo 进入配置生成的api;此时选择 Node.js

node中短信api实现验证码登录的示例代码

2.2 根据生成的api 在项目中使用

代码注释详尽

const Core = require('@alicloud/pop-core'); //cwen 调用阿里短信模块(需先安装)
//cwen 对阿里短信服务API进行配置
let client = new Core({
 accessKeyId: '<accessKeyId>', // 需要先申请(步骤在下文)
 accessKeySecret: '<accessSecret>', // 需要先申请(步骤在下文)
 endpoint: 'https://dysmsapi.aliyuncs.com', //无需更改
 apiVersion: '2017-05-25' //无需更改
});
//cwen 请求方式
let requestOption = {
  method: 'POST'
};

//# 生成随机四位数,模拟验证码
function rander(max, min) {
  return Math.floor(Math.random() * (max - min)) + min
}
//# 存储手机号+验证码(方便验证)
var loginInfo = [];
//# 验证手机号是否已经发送个验证码
let validate = (phone) => {
  return loginInfo.some(item => item.phone === phone)
}
//# 验证验证码是否一致
let validateCode = (phone, code) => {
  return loginInfo.some(item => (item.phone === phone && item.code == code))
}

//cwen 用阿里云api发送短信验证(验证码登录)
let sendLoginCroeCode = async(req, res) => {
  let { phone } = req.body;
  let randCode = rander(1000, 9999);
  var params = {
      "RegionId": "cn-hangzhou",
      "PhoneNumbers": phone, // 客户端手机号
      "SignName": "小陈应用ya", //签名
      "TemplateCode": "SMS_197625305", //模板,用于发送文字信息
      "TemplateParam": JSON.stringify({ 'code': randCode }) //指定要发送的验证码(此处以rander 函数为例)
    }
     //# 发送验证码之前判断手机号是否注册过
  if (await isRegister(phone)) { // 此处为数据库操作(可忽略)
    client.request('SendSms', params, requestOption).then((result) => {
      if (result.Code == 'OK') {
        res.send({
          status: 200,
          msg: '发送成功'
        });
        loginInfo.push({
          phone: phone,
          code: randCode
        });
        console.log(randCode)
      } else {
        res.send({
          status: 400,
          msg: '发送失败'
        })
      }
    })
  } else {
    res.send({
      status: 400,
      msg: '该手机号未注册'
    })
  }
}

//# 验证码登录接口
let phoneCodeLogin = async(req, res) => {
  let { phone, code } = req.body;
  if (validate(phone)) { //判断手机号是否发送过验证码
    if (validateCode(phone, code)) { // 判断验证码与手机号是否匹配
      let user = await isFirstLogin(phone); // 此处为数据库操作,获取用户信息(可忽略)
      res.send({
        status: 200,
        msg: '登录成功',
        data: user[0]
      })
      loginInfo = []; // 登录成功,立马清空数组,以免无法再次发送验证码
    } else {
      res.send({
        status: 400,
        msg: '验证码错误'
      })
    }
  } else {
    res.send({
      status: 400,
      msg: '未获取验证码'
    })
  }
}

// 注意:最后记得把接口暴露出去

注意accessKeyId、accessKeySecret 需要先申请再使用

node中短信api实现验证码登录的示例代码

3. 使用接口登录

此处以Postman 接口调试工具为例,手机号为数据库中注册过的手机号

请求发送验证码

node中短信api实现验证码登录的示例代码

手机收到验证码

node中短信api实现验证码登录的示例代码

验证码登录

node中短信api实现验证码登录的示例代码

到此这篇关于node中短信api实现验证码登录的示例代码的文章就介绍到这了,更多相关node 短信验证码登录内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
jQuery 1.7.2中getAll方法的疑惑分析
May 23 Javascript
js前台分页显示后端JAVA数据响应
Mar 18 Javascript
Extjs实现进度条的两种便捷方式
Sep 26 Javascript
深入理解setTimeout函数和setInterval函数
May 20 Javascript
jQuery解决IE6、7、8不能使用 JSON.stringify 函数的问题
May 31 Javascript
jQuery动态修改字体大小的方法【测试可用】
Sep 09 Javascript
js实现将json数组显示前台table中
Jan 10 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
Apr 03 jQuery
对angularJs中controller控制器scope父子集作用域的实例讲解
Oct 08 Javascript
webpack4 从零学习常用配置(小结)
May 28 Javascript
解决layui弹框失效的问题
Sep 09 Javascript
详细分析vue响应式原理
Jun 22 Javascript
vue实现按钮切换图片
Jan 20 #Vue.js
node脚手架搭建服务器实现token验证的方法
Jan 20 #Javascript
Vue实现图书管理案例
Jan 20 #Vue.js
浅析JavaScript中的事件委托机制跟深浅拷贝
Jan 20 #Javascript
详解vue之自行实现派发与广播(dispatch与broadcast)
Jan 19 #Vue.js
js实现电灯开关效果
Jan 19 #Javascript
jquery实现穿梭框功能
Jan 19 #jQuery
You might like
MySQL相关说明
2007/01/15 PHP
33道php常见面试题及答案
2015/07/06 PHP
PHP5.2中PDO的简单使用方法
2016/03/25 PHP
php mysql数据库操作类(实例讲解)
2017/08/06 PHP
浅析PHP类的反射来实现依赖注入过程
2018/02/06 PHP
ThinkPHP框架整合微信支付之刷卡模式图文详解
2019/04/10 PHP
jQuery 动画基础教程
2008/12/25 Javascript
js Flash插入函数免激活代码
2009/03/31 Javascript
基于jQuery的可以控制左右滚动及自动滚动效果的代码
2010/07/25 Javascript
Javascript 按位左移运算符使用介绍(
2014/02/04 Javascript
jQuery实现彩带延伸效果的网页加载条loading动画
2015/10/29 Javascript
学习使用jquery iScroll.js移动端滚动条插件
2020/03/24 Javascript
jQuery插件HighCharts绘制简单2D柱状图效果示例【附demo源码】
2017/03/21 jQuery
JavaScript变量提升和严格模式实例分析
2019/01/27 Javascript
微信小程序如何实现radio单选框单击打勾和取消
2020/01/21 Javascript
JS实现长图上下滚动效果
2020/03/19 Javascript
小程序中使用css var变量(使js可以动态设置css样式属性)
2020/03/31 Javascript
你不知道的 TypeScript 高级类型(小结)
2020/08/28 Javascript
python微信跳一跳系列之棋子定位像素遍历
2018/02/26 Python
Python网络编程基于多线程实现多用户全双工聊天功能示例
2018/04/10 Python
利用python如何处理百万条数据(适用java新手)
2018/06/06 Python
pandas 根据列的值选取所有行的示例
2018/11/07 Python
在numpy矩阵中令小于0的元素改为0的实例
2019/01/26 Python
python 计算数据偏差和峰度的方法
2019/06/29 Python
Django实现web端tailf日志文件功能及实例详解
2019/07/28 Python
Python迭代器协议及for循环工作机制详解
2020/07/14 Python
Python本地及虚拟解释器配置过程解析
2020/10/13 Python
python 读取串口数据的示例
2020/11/09 Python
css3发光搜索表单分享
2014/04/11 HTML / CSS
美国顶级品牌男士大码服装店:DXL
2017/08/30 全球购物
带病坚持工作事迹
2014/05/03 职场文书
规范化管理年活动总结
2014/08/29 职场文书
红白喜事主持词
2015/07/06 职场文书
汽车修理厂管理制度
2015/08/05 职场文书
如何用JavaScript学习算法复杂度
2021/04/30 Javascript
万能密码的SQL注入漏洞其PHP环境搭建及防御手段
2021/09/04 SQL Server