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的日期格式化算法示例
Jul 31 Javascript
javascript+canvas制作九宫格小程序
Dec 28 Javascript
Node.js编程中客户端Session的使用详解
Jun 23 Javascript
jquery无限级联下拉菜单简单实例演示
Nov 23 Javascript
JavaScript中0和&quot;&quot;比较引发的问题
May 26 Javascript
使用Node.js实现ORM的一种思路详解(图文)
Oct 24 Javascript
实例学习JavaScript读取和写入cookie
Jan 29 Javascript
Vue兼容ie9的问题全面解决方案
Jun 19 Javascript
读懂CommonJS的模块加载
Apr 19 Javascript
vue实现单一筛选、删除筛选条件
Oct 26 Javascript
vue实现倒计时功能
Mar 24 Vue.js
类和原型的设计模式之复制与委托差异
Jul 07 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
漫威DC御用漫画家去世 他的表情包曾走红网络
2020/04/09 欧美动漫
PHP+FastCGI+Nginx配置PHP运行环境
2014/08/07 PHP
QQ互联一键登录审核不通过的解决方案
2014/09/10 PHP
FCK调用方法..
2006/12/21 Javascript
JavaScript中Math对象使用说明
2008/01/16 Javascript
javascript针对DOM的应用分析(四)
2012/04/15 Javascript
JS 获取滚动条高度示例代码
2013/10/24 Javascript
jquery.form.js用法之清空form的方法
2014/03/07 Javascript
AngularJS学习笔记之基本指令(init、repeat)
2015/06/16 Javascript
Angularjs 实现移动端在线测评效果(推荐)
2017/04/05 Javascript
javascript闭包功能与用法实例分析
2017/04/06 Javascript
JS 中document.write()的用法和清空的原因浅析
2017/12/04 Javascript
Javascript中的作用域及块级作用域
2017/12/08 Javascript
AngularJS下$http服务Post方法传递json参数的实例
2018/03/29 Javascript
JavaScript函数节流和函数去抖知识点学习
2018/07/31 Javascript
基于Vue 2.0 监听文本框内容变化及ref的使用说明介绍
2018/08/24 Javascript
浅谈 Webpack 如何处理图片(开发、打包、优化)
2019/05/15 Javascript
vue移动端弹起蒙层滑动禁止底部滑动操作
2020/07/22 Javascript
解决vue做详情页跳转的时候使用created方法 数据不会更新问题
2020/07/24 Javascript
[03:17]DOTA2英雄基础教程 剧毒术士
2013/12/12 DOTA
在VS Code上搭建Python开发环境的方法
2018/04/06 Python
如何在Python中实现goto语句的方法
2019/05/18 Python
使用python的turtle函数绘制一个滑稽表情
2020/02/28 Python
python基于爬虫+django,打造个性化API接口
2021/01/21 Python
西班牙手机之家:Phone House
2018/10/18 全球购物
改变生活的男士内衣:SAXX Underwear
2019/08/28 全球购物
企业项目策划书
2014/01/11 职场文书
面临毕业的毕业生自荐书范文
2014/02/05 职场文书
安全横幅标语
2014/06/09 职场文书
企业文化宣传标语
2014/06/09 职场文书
2014年十八届四中全会思想汇报范文
2014/10/17 职场文书
事业单位个人总结
2015/02/12 职场文书
我爱我班主题班会
2015/08/13 职场文书
诉讼和解协议书
2016/03/23 职场文书
Go 自定义package包设置与导入操作
2021/05/06 Golang
使用python绘制分组对比柱状图
2022/04/21 Python