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.ui.dialog 增加“在当前鼠标位置打开”的功能
Nov 24 Javascript
javascript 动态生成私有变量访问器
Dec 06 Javascript
JavaScript在IE和Firefox(火狐)的不兼容问题解决方法小结
Apr 13 Javascript
js函数的延迟加载实现代码
Oct 11 Javascript
JS获取几种URL地址的方法小结
Feb 26 Javascript
js QQ客服悬浮效果实现代码
Dec 12 Javascript
js仿手机页面文件下拉刷新效果
Oct 14 Javascript
javascript ASCII和Hex互转的实现方法
Dec 27 Javascript
layer.open关闭父窗口 以及调用父页面的方法
Aug 17 Javascript
微信小程序页面间传值与页面取值操作实例分析
Apr 30 Javascript
JS实现无限轮播无倒退效果
Sep 21 Javascript
JavaScript中常用的3种弹出提示框(alert、confirm、prompt)
Nov 10 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代码优化技巧小结
2015/09/29 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
2019/04/10 PHP
Smarty模板语法详解
2019/07/20 PHP
php中try catch捕获异常实例详解
2020/08/06 PHP
jquery last-child 列表最后一项的样式
2010/01/22 Javascript
重构Javascript代码示例(重构前后对比)
2013/01/23 Javascript
一些老手都不一定知道的JavaScript技巧
2014/05/06 Javascript
js中日期的加减法
2015/05/06 Javascript
Bootstrap3制作搜索框样式的方法
2016/07/11 Javascript
jquery实现ajax提交表单信息的简单方法(推荐)
2016/08/24 Javascript
在localStorage中存储对象数组并读取的方法
2016/09/24 Javascript
浅谈js中几种实用的跨域方法原理详解
2016/12/02 Javascript
强大的 Angular 表单验证功能详细介绍
2017/05/23 Javascript
基于 Bootstrap Datetimepicker 联动
2017/08/03 Javascript
浅析前端路由简介以及vue-router实现原理
2018/06/01 Javascript
javascript实现对话框功能警告(alert 消息对话框)确认(confirm 消息对话框)
2019/05/07 Javascript
vue element-ui实现动态面包屑导航
2019/12/23 Javascript
关于angular 8.1使用过程中的一些记录
2020/11/25 Javascript
在Python中使用成员运算符的示例
2015/05/13 Python
python下MySQLdb用法实例分析
2015/06/08 Python
Python操作Word批量生成文章的方法
2015/07/28 Python
Python用UUID库生成唯一ID的方法示例
2016/12/15 Python
python numpy函数中的linspace创建等差数列详解
2017/10/13 Python
Python 绘制酷炫的三维图步骤详解
2019/07/12 Python
多版本python的pip 升级后, pip2 pip3 与python版本失配解决方法
2019/09/11 Python
Web前端页面跳转并取到值
2017/04/24 HTML / CSS
戴尔加拿大官网:Dell加拿大
2016/09/17 全球购物
德国运动营养和健身网上商店:Myprotein.de
2018/07/18 全球购物
美国主要的特色咖啡和茶公司:Peet’s Coffee
2020/02/14 全球购物
网站开发实习生的自我评价
2013/12/11 职场文书
小加工厂管理制度
2014/01/21 职场文书
领导干部遵守党的政治纪律情况思想汇报
2014/09/14 职场文书
工作检讨书500字
2014/10/19 职场文书
幼儿园体操比赛口号
2015/12/25 职场文书
oracle DGMGRL ORA-16603报错的解决方法(DG Broker)
2021/04/06 Oracle
Oracle 区块链表创建过程详解
2021/05/15 Oracle