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 相关文章推荐
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
Apr 12 Javascript
javascript动态加载实现方法一
Aug 22 Javascript
Javascript单元测试框架QUnitjs详细介绍
May 08 Javascript
JQuery插件Quicksand实现超炫的动画洗牌效果
May 03 Javascript
javascript实现图片跟随鼠标移动效果的方法
May 13 Javascript
浅谈JavaScript中的对象及Promise对象的实现
Nov 15 Javascript
jquery dialog获取焦点的方法
Feb 09 Javascript
基于JQuery和原生JavaScript实现网页定位导航特效
Apr 03 jQuery
JavaScript仿微信打飞机游戏
Jul 05 Javascript
Electron + vue 打包桌面操作流程详解
Jun 24 Javascript
vue 返回上一页,页面样式错乱的解决
Nov 14 Javascript
小程序实现长按保存图片的方法
Dec 31 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
生成sessionid和随机密码的例子
2006/10/09 PHP
浅谈PHP中单引号和双引号到底有啥区别呢?
2015/03/04 PHP
php实现的网络相册图片防盗链完美破解方法
2015/07/01 PHP
详解YII关联查询
2016/01/10 PHP
原生JS实现Ajax通过POST方式与PHP进行交互的方法示例
2018/05/12 PHP
php菜单/评论数据递归分级算法的实现方法
2019/08/01 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
翻译整理的jQuery使用查询手册
2007/03/07 Javascript
利用Dojo和JSON建立无限级AJAX动态加载的功能模块树
2007/03/24 Javascript
js获取浏览器的可视区域尺寸的实现代码
2011/11/30 Javascript
JQuery一种取同级值的方式(比如你在GridView中)
2012/03/15 Javascript
javascript中onclick(this)用法介绍
2013/04/19 Javascript
jquery、js调用iframe父窗口与子窗口元素的方法整理
2014/07/31 Javascript
无阻塞加载js,防止因js加载不了影响页面显示的问题
2016/12/18 Javascript
基于layer.js实现收货地址弹框选择然后返回相应的地址信息
2017/05/26 Javascript
vue父组件点击触发子组件事件的实例讲解
2018/02/08 Javascript
分析javascript原型及原型链
2018/03/18 Javascript
react-native封装插件swiper的使用方法
2018/03/20 Javascript
Vue.JS实现垂直方向展开、收缩不定高度模块的JS组件
2018/06/19 Javascript
Vue页面跳转传递参数及接收方式
2020/09/09 Javascript
Web服务器框架 Tornado简介
2014/07/16 Python
使用Python爬取最好大学网大学排名
2018/02/24 Python
python控制nao机器人身体动作实例详解
2019/04/29 Python
使用Python做定时任务及时了解互联网动态
2019/05/15 Python
python中sort和sorted排序的实例方法
2019/08/26 Python
10行Python代码计算汽车数量的实现方法
2019/10/23 Python
Python用摘要算法生成token及检验token的示例代码
2020/12/01 Python
解决python 执行shell命令无法获取返回值的问题
2020/12/05 Python
毕业生在校学习的自我评价分享
2013/10/08 职场文书
护理实习自我鉴定
2013/12/14 职场文书
农民工工资发放承诺书
2014/03/31 职场文书
养成教育经验材料
2014/05/26 职场文书
委托书范本
2014/09/13 职场文书
依法行政工作汇报材料
2014/10/28 职场文书
Python数据清洗工具之Numpy的基本操作
2021/04/22 Python
忆童年!用Python实现愤怒的小鸟游戏
2021/06/07 Python