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实现的仿sohu博客更换页面风格(简单版)
Mar 22 Javascript
JavaScript DOM 添加事件
Feb 14 Javascript
IE与firefox下Dhtml的一些区别小结
Dec 02 Javascript
JavaScript对象、属性、事件手册集合方便查询
Jul 04 Javascript
收集的一些Array及String原型对象的扩展实现代码
Dec 05 Javascript
javascript 判断中文字符长度的函数代码
Aug 27 Javascript
Javascript 字符串模板的简单实现
Feb 13 Javascript
js实现上传图片及时预览
May 07 Javascript
深入浅析knockout源码分析之订阅
Jul 12 Javascript
利用策略模式与装饰模式扩展JavaScript表单验证功能
Feb 14 Javascript
JS对象深度克隆实例分析
Mar 16 Javascript
Vue下路由History模式打包后页面空白的解决方法
Jun 29 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部分常见问题总结
2006/10/09 PHP
php 多个submit提交表单 处理方法
2009/07/07 PHP
php动态变量定义及使用
2015/06/10 PHP
PHP实现通过get方式识别用户发送邮件的方法
2015/07/16 PHP
yii2.0整合阿里云oss删除单个文件的方法
2017/09/19 PHP
visual studio code 调试php方法(图文详解)
2017/09/15 PHP
laravel-admin自动生成模块,及相关基础配置方法
2019/10/08 PHP
解决laravel资源加载路径设置的问题
2019/10/14 PHP
Dom在ajax技术中的作用说明
2010/10/25 Javascript
最佳JS代码编写的14条技巧
2011/01/09 Javascript
一些实用的jQuery代码片段收集
2011/07/12 Javascript
JavaScript控制各种浏览器全屏模式的方法、属性和事件介绍
2014/04/03 Javascript
jQuery给动态添加的元素绑定事件的方法
2015/03/09 Javascript
jquery Easyui快速开发总结
2015/08/20 Javascript
JavaScript判断页面加载完之后再执行预定函数的技巧
2016/05/17 Javascript
Vue页面骨架屏注入方法
2018/05/13 Javascript
JavaScript判断数组类型的方法
2019/10/23 Javascript
Python selenium文件上传方法汇总
2020/11/19 Python
Python中optparser库用法实例详解
2018/01/26 Python
Django中间件实现拦截器的方法
2018/06/01 Python
pandas进行数据的交集与并集方式的数据合并方法
2018/06/27 Python
python实现单链表中删除倒数第K个节点的方法
2018/09/28 Python
详解pandas使用drop_duplicates去除DataFrame重复项参数
2019/08/01 Python
如何理解Python中的变量
2020/06/01 Python
Python logging日志模块 配置文件方式
2020/07/12 Python
html5 input属性使用示例
2013/06/28 HTML / CSS
Viking比利时:购买办公用品
2019/10/30 全球购物
车间统计员岗位职责
2014/01/05 职场文书
一年级班主任感言
2014/03/08 职场文书
招标授权委托书样本
2014/09/23 职场文书
护士求职自荐信范文
2015/03/04 职场文书
2015年爱牙日活动总结
2015/03/23 职场文书
开票证明
2015/06/23 职场文书
简短清晨问候语
2015/11/10 职场文书
JavaScript 与 TypeScript之间的联系
2021/11/27 Javascript
动视暴雪取消疫苗禁令 让所有员工返回线下工作
2022/04/03 其他游戏