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 相关文章推荐
只需一行代码,轻松实现一个在线编辑器
Nov 12 Javascript
通过Jquery的Ajax方法读取将table转换为Json
May 31 Javascript
jQuery修改CSS伪元素属性的方法
Jul 30 Javascript
Node.js 异步编程之 Callback介绍(一)
Mar 30 Javascript
jQuery 获取多选框的值及多选框中文的函数
May 16 Javascript
Javascript中常用的检测方法小结
Oct 08 Javascript
JS+HTML5实现获取手机验证码倒计时按钮
Aug 08 Javascript
详解为生产环境编译Angular2应用的方法
Dec 10 Javascript
封装微信小程序http拦截器过程解析
Aug 13 Javascript
Windows上node.js的多版本管理工具用法实例分析
Nov 06 Javascript
vue-cli创建的项目中的gitHooks原理解析
Feb 14 Javascript
vue-cli3使用mock数据的方法分析
Mar 16 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
使用Limit参数优化MySQL查询的方法
2008/11/12 PHP
php daddslashes()和 saddslashes()有哪些区别分析
2012/10/26 PHP
Destoon旺旺无法正常显示,点击提示“会员名不存在”的解决办法
2014/06/21 PHP
电子商务网站上的常用的js放大镜效果
2011/12/08 Javascript
不同的jQuery API来处理不同的浏览器事件
2012/12/09 Javascript
Web表单提交之disabled问题js解决方法
2015/01/13 Javascript
Jquery中find与each方法用法实例
2015/02/04 Javascript
JS 对象属性相关(检查属性、枚举属性等)
2015/04/05 Javascript
浅谈jquery采用attr修改form表单enctype不起作用的问题
2016/11/25 Javascript
微信小程序 页面跳转和数据传递实例详解
2017/01/19 Javascript
基于vue打包后字体和图片资源失效问题的解决方法
2018/03/06 Javascript
Bootstrap标签页(Tab)插件切换echarts不显示问题的解决
2018/07/13 Javascript
Vue登录主页动态背景短视频制作
2019/09/21 Javascript
js实现百度淘宝搜索功能
2020/02/17 Javascript
javascript递归函数定义和用法示例分析
2020/07/22 Javascript
打包发布Python模块的方法详解
2016/09/18 Python
用python一行代码得到数组中某个元素的个数方法
2019/01/28 Python
Python操作redis实例小结【String、Hash、List、Set等】
2019/05/16 Python
opencv调整图像亮度对比度的示例代码
2019/09/27 Python
使用celery和Django处理异步任务的流程分析
2020/02/19 Python
python 日志 logging模块详细解析
2020/03/31 Python
使用python-cv2实现视频的分解与合成的示例代码
2020/10/26 Python
python Cartopy的基础使用详解
2020/11/01 Python
Python .py生成.pyd文件并打包.exe 的注意事项说明
2021/03/04 Python
HTML5 localStorage使用总结
2017/02/22 HTML / CSS
加拿大约会网站:EliteSingles.ca
2018/01/12 全球购物
美国翻新电子产品商店:The Store
2019/10/08 全球购物
EJB与JAVA BEAN的区别
2016/08/29 面试题
详细的大学生创业计划书模板
2014/01/27 职场文书
2014年技术员工作总结
2014/11/18 职场文书
先进单位申报材料
2014/12/25 职场文书
经理助理岗位职责
2015/02/02 职场文书
前台接待员岗位职责
2015/04/15 职场文书
vue项目两种方式实现竖向表格的思路分析
2021/04/28 Vue.js
MySQL数据库压缩版本安装与配置详细教程
2021/05/21 MySQL
【海涛教你打DOTA】黑鸟第一视角解说
2022/04/01 DOTA