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 相关文章推荐
JS 统计时间
Mar 09 Javascript
自适应高度框架 ----属个人收藏内容
Jan 22 Javascript
javascript函数库-集合框架
Apr 27 Javascript
jquery ajax执行后台方法
Mar 18 Javascript
JavaScript  cookie 跨域访问之广告推广
Apr 20 Javascript
JS面试题---关于算法台阶的问题
Jul 26 Javascript
Angular2 环境配置详细介绍
Sep 21 Javascript
关于预加载InstantClick的问题解决方法
Sep 12 Javascript
使用vue实现grid-layout功能实例代码
Jan 05 Javascript
js实现鼠标拖拽div左右滑动
Jan 15 Javascript
angula中使用iframe点击后不执行变更检测的问题
May 10 Javascript
介绍一下28个JS常用数组方法
May 06 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
一些被忽视的PHP函数(简单整理)
2010/04/30 PHP
APACHE的AcceptPathInfo指令使用介绍
2013/01/18 PHP
深入PHP异步执行的详解
2013/06/03 PHP
PHP实现批量检测网站是否能够正常打开的方法
2016/08/23 PHP
PHP实现合并两个排序链表的方法
2018/01/19 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
2019/10/11 PHP
基于jQuery的图片左右无缝滚动插件
2012/05/23 Javascript
js触发onchange事件的方法说明
2014/03/08 Javascript
node.js中的console用法总结
2014/12/15 Javascript
JS设置网页图片vspace和hspace属性的方法
2015/04/01 Javascript
js中最容易被忽视的事件问题大总结
2016/05/15 Javascript
jQuery实现区域打印功能代码详解
2016/06/17 Javascript
js绘制购物车抛物线动画
2020/11/18 Javascript
基于JS快速实现导航下拉菜单动画效果附源码下载
2016/10/27 Javascript
微信小程序 less文件编译成wxss文件实现办法
2016/12/05 Javascript
浏览器调试动态js脚本的方法(图解)
2018/01/19 Javascript
vue iView 上传组件之手动上传功能
2018/03/16 Javascript
使用electron实现百度网盘悬浮窗口功能的示例代码
2018/10/24 Javascript
js canvas画布实现高斯模糊效果
2018/11/27 Javascript
vue el-upload上传文件的示例代码
2020/12/21 Vue.js
[45:14]Optic vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
举例讲解Linux系统下Python调用系统Shell的方法
2015/11/07 Python
Python的Django框架中forms表单类的使用方法详解
2016/06/21 Python
Python字符串和字典相关操作的实例详解
2017/09/23 Python
python梯度下降法的简单示例
2018/08/31 Python
pycharm的console输入实现换行的方法
2019/01/16 Python
浅谈python3.6的tkinter运行问题
2019/02/22 Python
html特殊符号示例 html特殊字符编码对照表
2014/01/14 HTML / CSS
马德里著名的运动鞋商店:NOIRFONCE
2019/04/12 全球购物
在浏览器端如何得到服务器端响应的XML数据
2012/11/24 面试题
奉献家乡演讲稿
2014/09/13 职场文书
群众路线专项整治方案
2014/10/27 职场文书
2015年端午节活动策划书
2015/05/05 职场文书
2019年让高校“心动”的自荐信
2019/03/25 职场文书
HTML+CSS 实现顶部导航栏菜单制作
2021/06/03 HTML / CSS
Redis集群新增、删除节点以及动态增加内存的方法
2021/09/04 Redis