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 相关文章推荐
给Function做的OOP扩展
May 07 Javascript
JavaScript 内置对象属性及方法集合
Jul 04 Javascript
关于Javascript模块化和命名空间管理的问题说明
Dec 06 Javascript
jquery时间下拉框小例子
Apr 15 Javascript
微信WeixinJSBridge API使用实例
May 25 Javascript
Bootstrap实现圆角、圆形头像和响应式图片
Dec 14 Javascript
vue.js源代码core scedule.js学习笔记
Jul 03 Javascript
详解js正则表达式验证时间格式xxxx-xx-xx形式
Feb 09 Javascript
jQuery+Datatables实现表格批量删除功能【推荐】
Oct 24 jQuery
layui 根据后台数据动态创建下拉框并同时默认选中的实例
Sep 02 Javascript
使用JavaScript实现网页秒表功能(含开始、暂停、继续、重置功能)
Jun 05 Javascript
Vue+penlayers实现多边形绘制及展示
Dec 24 Vue.js
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
Fatal error: Call to undefined function curl_init()解决方法
2010/04/09 PHP
php实现在线生成条形码示例分享(条形码生成器)
2013/12/30 PHP
php创建多级目录的方法
2015/03/24 PHP
培养自己的php编码规范
2015/09/28 PHP
Zend Framework数据库操作方法实例总结
2016/12/11 PHP
php 截取GBK文档某个位置开始的n个字符方法
2017/03/08 PHP
详解php框架Yaf路由重写
2017/06/20 PHP
插件:检测javascript的内存泄漏
2007/03/04 Javascript
基于jquery+thickbox仿校内登录注册框
2010/06/07 Javascript
javascript中不等于的代码是什么怎么写
2013/12/29 Javascript
iframe父页面获取子页面参数的方法
2014/02/21 Javascript
JS+CSS简单树形菜单实现方法
2015/09/12 Javascript
JavaScript 实现的 zip 压缩和解压缩工具包Zip.js使用详解
2015/12/14 Javascript
vue之浏览器存储方法封装实例
2018/03/15 Javascript
jQuery length 和 size()区别总结
2018/04/26 jQuery
javascript实现日历效果
2019/06/17 Javascript
layui使用label标签的方法
2019/09/14 Javascript
vue简单练习 桌面时钟的实现代码实例
2019/09/19 Javascript
Python实现telnet服务器的方法
2015/07/10 Python
Sanic框架路由用法实例分析
2018/07/16 Python
基于Django框架利用Ajax实现点赞功能实例代码
2018/08/19 Python
python通过http下载文件的方法详解
2019/07/26 Python
Python ini文件常用操作方法解析
2020/04/26 Python
瑞典时尚服装购物网站:Miinto.se
2017/10/30 全球购物
JSF面试题:Jsf中导航的标签是什么
2013/04/20 面试题
XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
2016/01/12 面试题
中医药大学毕业生自荐信
2013/11/08 职场文书
给排水工程师岗位职责
2013/11/21 职场文书
护士自我评价范文
2014/01/25 职场文书
人力资源管理专业应届生求职信
2014/04/24 职场文书
乡党委干部党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/01 职场文书
优秀班主任事迹材料
2014/12/16 职场文书
公司行政助理岗位职责
2015/04/11 职场文书
教师工作证明范本
2015/06/12 职场文书
2016教师给学生的毕业寄语
2015/12/04 职场文书
MySQL 如何限制一张表的记录数
2021/09/14 MySQL