如何通过腾讯云短信实现发送验证码并校验验证码以实现登录功能

这篇具有很好参考价值的文章主要介绍了如何通过腾讯云短信实现发送验证码并校验验证码以实现登录功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

如何通过腾讯云短信实现发送验证码并校验验证码以实现登录功能

验证码相关的10种技术

  1. 图像处理技术:生成、识别、验证验证码的图像。
  2. 机器学习技术:让计算机自动学习并识别验证码。
  3. 文字识别技术:将图像中的文字转换成计算机可读的文本。
  4. 模式识别技术:识别验证码中的模式及规律。
  5. 图像噪声处理技术:去除图像中的噪声干扰。
  6. 前端技术开发:为用户提供验证码输入界面。
  7. 后端技术开发:为验证码生成、识别、验证提供服务。
  8. 数据库技术:存储验证码及相关数据。
  9. 安全技术:防止验证码被人类或机器暴力破解。
  10. 人工智能技术:让计算机自动调整验证码以对抗破解尝试。

函数代码:文章来源地址https://www.toymoban.com/news/detail-495102.html


/**************************************************
* 功能:1.发送短信 2.登录(校验短信验证码)
* 函数运行的前提条件: 
1.创建模板函数后,请先添加函数运行角色,并给该角色关联短信QcloudSMSFullAccess权限。
2.本服务用到redis存储验证码,请先申请redis资源,并将redis的host和密码设置成环境变量。
3.去云短信控制台申请短信模板和签名
* 详细请参考:https://github.com/tencentyun/scf-demo-repo/tree/master/Nodejs8.9-SmsVerificationCode
***************************************************/

'use strict';
const redis = require('ioredis');
const tencentcloud = require('tencentcloud-sdk-nodejs');
const queryParse = require('querystring')
const expireTime = 5 * 60;//验证码有效期5分钟

exports.main_handler = async (event, context, callback) => {
  let queryString = event.queryString // get形式
  if(event.httpMethod === "POST") { // post形式
    queryString = queryParse.parse(event.body)
  }
  
  if(!queryString || !queryString.method || !queryString.phone) {
    return {
      codeStr: 'InValidParam',
      msg: "缺少参数"
    }
  }
  const redisStore = new redis({
    port: 6369, // Redis instance port, redis实例端口
    host: process.env.REDIS_HOST, // Redis instance host, redis实例host
    family: 4,
    password: process.env.REDIS_PASSWORD, // Redis instance password, redis实例密码
    db: 0
  });
  if(queryString.method === "getSms") {
    return await getSms(queryString, redisStore)
  } else if(queryString.method === "login") {
    return await loginSms(queryString, redisStore)
  }
}

/*
* 功能:登录,校验验证码
*/
async function loginSms(queryString, redisStore) {
  if(!queryString.code) {
    return {
        codeStr: 'MissingCode',
        errorMessage: "缺少验证码参数"
    }
  }
  const redisResult = await redisPromise(redisStore, queryString)
  if(!redisResult) {//没有找到记录
    return {
      codeStr: 'CodeHasExpired',
      msg: "验证码已过期"
    }
  }
  let result = JSON.parse(redisResult)
  
  if(!result || result.used || result.num >= 3) {
    return {
      codeStr: 'CodeHasValid',
      msg: "验证码已失效"
    }
  }
  
  if(result.code == queryString.code) { //验证码校验正确
    updateRedis(redisStore, queryString.phone, result, true) //将验证码更新为已使用
    // 验证码校验通过,执行登录逻辑
    console.log('校验验证码成功')
    return {
      codeStr: 'Success',
      msg: '校验验证码成功'
    }
  } else { // 验证码校验失败
    updateRedis(redisStore, queryString.phone, result, false)
    return {
      codeStr: 'CodeIsError',
      msg: "请检查手机号和验证码是否正确"
    }
  }
}
// 更新redis状态
function updateRedis(redisStore, phone, result, used) {
  const sessionCode = {
    code: result.code,
    sessionId: result.sessionId,
    num: ++result.num, //验证次数,最多可验证3次
    used: used //true-已使用,false-未使用
  }
  redisStore.set('sms_' + phone, JSON.stringify(sessionCode));
  if(used) {
    redisStore.expire('sms_' + phone, 0);
  } else {
    redisStore.expire('sms_' + phone, expireTime);
  }
}
/*
 * 功能:根据手机号获取短信验证码
 */
async function getSms(queryString, redisStore) {
  const code = Math.random().toString().slice(-6);//生成6位数随机验证码
  const sessionCode = {
      code: code,
      num: 0, //验证次数,最多可验证3次
      used: false //false-未使用,true-已使用
  }
  redisStore.set('sms_' + queryString.phone, JSON.stringify(sessionCode));
  redisStore.expire('sms_' + queryString.phone, expireTime);

  let queryResult = await sendSms(queryString.phone, code)
  return queryResult
}
/*
 * 功能:通过sdk调用短信api发送短信
 * 参数 手机号、短信验证码
 */
async function sendSms(phone, code) {
  const SmsClient = tencentcloud.sms.v20190711.Client;
  const Credential = tencentcloud.common.Credential;
  const ClientProfile = tencentcloud.common.ClientProfile;
  const HttpProfile = tencentcloud.common.HttpProfile;
  const secretId = process.env.TENCENTCLOUD_SECRETID;
  const secretKey = process.env.TENCENTCLOUD_SECRETKEY;
  const token = process.env.TENCENTCLOUD_SESSIONTOKEN;

  let cred = new Credential(secretId, secretKey, token);
  let httpProfile = new HttpProfile();
  httpProfile.endpoint = "sms.tencentcloudapi.com";
  let clientProfile = new ClientProfile();
  clientProfile.httpProfile = httpProfile;
  let client = new SmsClient(cred, "ap-guangzhou", clientProfile);

  let req = {
      PhoneNumberSet: ["+" + phone], //大陆手机号861856624****
      TemplateID: process.env.SMS_TEMPLATE_ID, //腾讯云短信模板id
      Sign: process.env.SMS_SIGN, //腾讯云短信签名
      TemplateParamSet: [code],
      SmsSdkAppid: process.env.SMS_SDKAPPID //短信应用id
  }
  
  let queryResult = await smsPromise(client, req)
  return queryResult
}

async function smsPromise(client, req) {
  return new Promise((resolve, reject) => {
      client.SendSms(req, function(errMsg, response) {
          if (errMsg) {
              reject(errMsg)
          } else {
              if(response.SendStatusSet && response.SendStatusSet[0] && response.SendStatusSet[0].Code === "Ok") {
                  resolve({
                      codeStr: response.SendStatusSet[0].Code,
                      msg: response.SendStatusSet[0].Message
                  })
              } else {
                  resolve({
                      codeStr: response.SendStatusSet[0].Code,
                      msg: response.SendStatusSet[0].Message
                  })
              }
          }                
      });
  })
}

async function redisPromise(redisStore, queryString) {
  return new Promise((res, rej) => {
    redisStore.get('sms_' + queryString.phone, function (err, result) {
      if (err) {
        rej(err)
      }
      res(result)
    });
  })
}

到了这里,关于如何通过腾讯云短信实现发送验证码并校验验证码以实现登录功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android 获取短信验证码并自动填充(踩坑小米、荣耀、OPPO、华为)

    最近弄了个短信自动填充功能,一开始觉得很简单,不就是动态注册个广播接收器去监听短信消息不就可以了吗?结果没这么简单,问题就出在机型的适配上。小米的短信权限、荣耀、OPPO的短信监听都是坑,暂时就用这三个手机测了,其他的遇到了再补充。 下面简单讲讲:

    2024年02月01日
    浏览(41)
  • 【python】如何通过python来发送短信

    ✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,

    2024年04月27日
    浏览(25)
  • (短信服务)java SpringBoot 阿里云短信功能实现发送手机验证码

    阿里云官网: https://www.aliyun.com/ 点击官网首页注册按钮。 注册成功后,点击登录按钮进行登录。登录后进入短信服务管理页面,选择国内消息菜单: 短信签名是短信发送者的署名,表示发送方的身份。 切换到【模板管理】标签页: 短信模板包含短信发送内容、场景、变量信息

    2024年02月02日
    浏览(39)
  • 前端Vue自定义发送短信验证码弹框popup 实现剩余秒数计数 重发短信验证码

    前端Vue自定义发送短信验证码弹框popup 实现剩余秒数计数 重发短信验证码, 阅读全文下载完整代码请关注微信公众号: 前端组件开发 效果图如下: 实现代码如下: 使用方法 HTML代码实现部分 组件实现代码

    2024年02月11日
    浏览(27)
  • 如何通过python来给手机发送一条短信?

    要通过Python发送短信到手机,您可以使用不同的短信服务提供商的API。以下是一个使用Twilio和Sinch服务提供商的示例,您可以根据自己的选择来决定使用哪个。 使用Twilio发送短信: 首先,注册一个Twilio账户并获取您的账户SID、认证令牌和Twilio号码。 安装 twilio 包,如果您还没

    2024年02月12日
    浏览(36)
  • 【账号系统之(手机验证码登录)】使用阿里云短信服务,实现服务商给手机发送验证码功能。

    目录 一、前言 二、前期准备 三、购买短信服务 四、申请签名和模板 (1) 进入阿里云短信服务控制台 (2) 添加签名 (3) 添加模板 五、RAM申请及权限配置 (1) 进入RAM访问控制界面 (2) 创建用户 (3) 分配权限 (4) 创建角色 (5) 记录段的值 六、阿里云.NET SDK身份验证接入 (1) 了解

    2024年02月04日
    浏览(42)
  • 【python】短信验证之腾讯云短信验证详细步骤

    注册一个腾讯云账户,腾讯云中提供了很多功能:云服务器、云储存器、云直播、云短信等很多功能。 注册地址:https://cloud.tencent.com/ 根据提示一步步进行注册即可, 实名注册时,什么行业、通讯等信息,按照自己的的实际情况填写即可,实在不知道的可以随便填。 腾讯云注

    2024年02月05日
    浏览(30)
  • 项目7:(aliyun)实现短信的发送和验证微服务和上传文件删除文件微服务

    ①gulimall-common和service-base放什么? gulimall-common写全局用的工具包 全局异常处理 全局返回值 工具包(生成随机数,校验手机号) service-base写服务的配置 redis配置类序列化的方式 swagger文档生成分组 ②生成四位或六位随机数 ③校验手机号码正确 ④补充错误代码-501阿里云响应失

    2023年04月19日
    浏览(31)
  • SpringBoot——短信发送、手机验证码登录

    目录 一、短信发送 1.1 阿里云短信服务 1.1.1 设置短信签名 1.1.2 模板管理 1.1.3 设置AccessKey 1.2 短信发送——代码开发 1.2.1 导入maven坐标 1.2.2 调用API 1.2  手机验证码登录 1.2.1 用户数据库表 1.2.2  修改过滤器 1.2.3   随机生成验证码的工具类 1.2.4 手机验证码登录-- 发送验证码

    2023年04月22日
    浏览(32)
  • 【Springboot】| 阿里云发送短信验证码,你会了吗?

    专栏 名字 🔥Elasticsearch专栏 es 🔥spring专栏 spring开发 redis专栏 redis学习笔记 🔥项目专栏 项目集锦 修bug专栏 bug修理厂 狮子之前发了一篇《邮箱发送验证码,你会了吗?》,很快上了热度榜单,但是那篇文章只是简单介绍了如何接收验证码的流程以及安利了一个接收验证码的

    2024年02月08日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包