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实现给页面换肤的方法
May 30 Javascript
jquery 实现输入邮箱时自动补全下拉提示功能
Oct 04 Javascript
jQuery 选择器(61种)整理总结
Sep 26 Javascript
jQuery UI插件实现百度提词器效果
Nov 21 Javascript
原生JS实现幻灯片
Feb 22 Javascript
JS实现按钮颜色切换效果
Sep 05 Javascript
vue中的模态对话框组件实现过程
May 01 Javascript
vue+Element-ui实现分页效果实例代码详解
Dec 10 Javascript
JavaScript遍历DOM元素的常见方式示例
Feb 16 Javascript
JavaScript 链表定义与使用方法示例
Apr 28 Javascript
vue使用require.context实现动态注册路由
Dec 25 Vue.js
JS开发前端团队展示控制器来为成员引流
Aug 14 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 配置open_basedir 让各虚拟站点独立运行
2009/11/12 PHP
php ajax 静态分页过程形式
2011/09/02 PHP
PHP获取栏目的所有子级和孙级栏目的ID号示例
2014/04/01 PHP
PHP常用的排序和查找算法
2015/08/06 PHP
PHP基于面向对象实现的留言本功能实例
2018/04/04 PHP
js正确获取元素样式详解
2009/08/07 Javascript
jq实现酷炫的鼠标经过图片翻滚效果
2014/03/12 Javascript
jquery的ajax异步请求接收返回json数据实例
2014/06/16 Javascript
jquery实现简单的无缝滚动
2015/04/15 Javascript
JS实现带缓冲效果打开、关闭、移动一个层的方法
2015/05/09 Javascript
Bootstrap每天必学之面板
2015/11/30 Javascript
jQuery Easyui实现左右布局
2016/01/26 Javascript
AngularJS基于factory创建自定义服务的方法详解
2017/05/25 Javascript
Vue学习之路之登录注册实例代码
2017/07/06 Javascript
vue 地图可视化 maptalks 篇实例代码详解
2019/05/21 Javascript
Vue data的数据响应式到底是如何实现的
2020/02/11 Javascript
Vue使用Element实现增删改查+打包的步骤
2020/11/25 Vue.js
[46:00]Ti4 冒泡赛第二轮LGD vs C9 2
2014/07/14 DOTA
Python浅复制中对象生存周期实例分析
2018/04/02 Python
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
2018/04/17 Python
python 读写文件,按行修改文件的方法
2018/07/12 Python
python利用paramiko实现交换机巡检的示例
2020/09/22 Python
python进行二次方程式计算的实例讲解
2020/12/06 Python
全球才华横溢工匠的家居装饰、珠宝和礼物:NOVICA
2021/01/22 全球购物
广州御银科技股份有限公司试卷(C++)
2016/11/04 面试题
三好学生自我鉴定
2013/12/17 职场文书
优秀共产党员演讲稿
2014/09/04 职场文书
业务员辞职信范文
2015/03/02 职场文书
工厂仓管员岗位职责
2015/04/01 职场文书
小学毕业感言200字
2015/07/30 职场文书
资深HR教你写好简历中的自我评价
2019/05/07 职场文书
创业计划书之农家乐
2019/10/09 职场文书
简单实现一个手持弹幕功能+文字抖动特效
2021/03/31 HTML / CSS
Go缓冲channel和非缓冲channel的区别说明
2021/04/25 Golang
golang协程池模拟实现群发邮件功能
2021/05/02 Golang
Android Flutter实现3D动画效果示例详解
2022/04/07 Java/Android