加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > Asp教程 > 正文

如何用云开发高效快捷地实现短信验证码登录?

发布时间:2022-12-03 15:01:13 所属栏目:Asp教程 来源:网络
导读: 云开发扩展能力之短信验证码登录
短信验证码登录支持在客户端使用短信验证码进行登录,封装了短信验证码的生成、发送、校验和定时清理逻辑,帮助开发者进行鉴权。登录成功后,用户身份将转

云开发扩展能力之短信验证码登录

短信验证码登录支持在客户端使用短信验证码进行登录,封装了短信验证码的生成、发送、校验和定时清理逻辑,帮助开发者进行鉴权。登录成功后,用户身份将转化为正式用户。

本次实战我们将使用web云开发实现短信验证码登录并新增数据。

资源准备一、云开发环境开通

如果已有云环境,可直接跳过这一步

打开云开发控制台新建云环境:

asp邮箱格式验证_asp验证码_asp.net输入验证

打开云开发 CloudBase 控制台,打开左侧菜单里的数据库,点击添加集合,新增一个test集合用于新增数据测试。

asp邮箱格式验证_asp验证码_asp.net输入验证

二、腾讯云短信服务1.开通短信服务

登录腾讯云短信控制台,这里的账号不限于小程序的账号,其他账号也可以;也不限于是个人账号还是企业账号,不过账号需要进行实名认证,个人认证用户只能发送短信验证码、短信通知等,不能用于营销短信;企业认证用户可以发送短信验证码、短信通知、营销短信等。如果账号已经认证,直接申请短信服务就可以开通了。

2.创建签名和正文模板

国内短信由签名+正文组成,签名符号为【】,发送短信内容时必须带签名。所以要发送短信asp验证码,需要申请短信签名和正文模板,两者都通过审核后,就可以开始发送短信了。

创建签名

打开左侧菜单里的国内短信-签名管理,点击创建签名,创建完签名后,这个签名内容之后会用到。

asp验证码_asp邮箱格式验证_asp.net输入验证

创建正文模板

打开左侧菜单里的国内短信-正文模板管理,点击创建正文模板,创建完模板后,会有一个模板ID,这个之后会用到,也要记住你模板的变量位置。

asp邮箱格式验证_asp.net输入验证_asp验证码

三、短信验证码登录扩展能力

打开云开发 CloudBase 控制台,打开左侧菜单里的扩展能力,点击短信验证码登录模块进行安装。

asp.net输入验证_asp验证码_asp邮箱格式验证

该扩展会创建以下云资源:

云函数:

云数据库:

根据提示完成配置和安装。

四、开通静态网站托管

云开发为开发者提供静态网页托管的能力,静态资源(HTML、CSS、JavaScript、字体等)的分发由对象存储 COS 和拥有多个边缘网点的 CDN 提供支持。您可在腾讯云控制台进行静态网站的部署,提供给您的用户访问。

打开云开发 CloudBase 控制台,打开左侧菜单里的静态网站托管,点击开启使用,然后等待几分钟便可初始化完成。

asp验证码_asp邮箱格式验证_asp.net输入验证

使用扩展

在 web 网站使用该扩展,请先在 云开发控制台 将网站域名添加为当前环境的安全域名。

打开云开发 CloudBase 控制台,复制静态网站托管-基础配置里的默认域名,然后打开左侧菜单里的环境-安全配置,将默认域名添加为WEB安全域名。

asp.net输入验证_asp验证码_asp邮箱格式验证

一、使用方法安装扩展 SDK 到项目

npm install --save @cloudbase/extension-sms

<script src="//unpkg.com/@cloudbase/extension-sms/built/index.umd.js">script>

2.调用扩展 SDK

调用参数

asp邮箱格式验证_asp.net输入验证_asp验证码

返回内容

目前两种 action 都没有返回值。(本例采用 auth.hasLoginState() 来判断登录 )

二、编写代码

写了一个简单的demo来实现登录并新增数据功能,代码如下:


<html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="Pragma" content="no-cache">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
  <meta name="format-detection" content="telephone=yes" />
  <meta name="apple-mobile-web-app-capable" content="yes" />
  <meta name="apple-mobile-web-app-status-bar-style" content="black" />
  <title>腾讯云云开发短信验证码登录title>
  
  
  <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css">
?
  <style type="text/css">
    body {
      margin: 0;
      padding: 0;
    }
?
    .modal_content {
      padding: 30px;
      display: flex;
      justify-content: center;
      flex-direction: column;
    }
?
    .modal_content>div {
      margin-bottom: 20px;
    }
?
    .modal_content>h5:first-child {
      margin: 30px 0px;
    }
?
    #dialog label {
      color: #666;
    }
?
    #phone1 {
      display: block;
      width: 100%;
      height: 70px;
      background: none;
      padding-top: 30px;
      border: 0;
      outline: none;
      text-align: center;
      margin-top: -30px;
      font-size: 16px;
      border-bottom: 1px solid rgba(0, 0, 0, .2);
      border-radius: 0;
    }
?
    .code1 {
      display: flex;
      flex-direction: row;
      justify-content: space-between;
      width: 100%;
      height: 70px;
      background: none;
      padding-top: 30px;
      margin-top: -30px;
      font-size: 16px;
      border-bottom: 1px solid rgba(0, 0, 0, .2);
      border-radius: 0;
    }
?
    #code1 {
      width: calc(100% - 90px);
      height: 55px;
      background: none;
      padding-top: 20px;
      border: 0;
      outline: none;
      text-align: center;
      margin-top: -20px;
      font-size: 16px;
    }
?
    #btnSendCode1 {
      width: 90px;
      height: 30px;
      padding: 0 5px;
      margin: 0;
      font-size: 14px;
      text-align: center;
      background: transparent;
      border-radius: 30px;
      color: #a07941;
      border-color: #a07941;
?
    }
?
    ::-webkit-input-placeholder {
      /* WebKit browsers */
      font-size: 14px;
      color: rgba(0, 0, 0, .4);
    }
?
    :-moz-placeholder {
      /* Mozilla Firefox 4 to 18 */
      font-size: 14px;
      color: rgba(0, 0, 0, .4);
    }
?
    ::-moz-placeholder {
      /* Mozilla Firefox 19+ */
      font-size: 14px;
      color: rgba(0, 0, 0, .4);
    }
?
    :-ms-input-placeholder {
      /* Internet Explorer 10+ */
      font-size: 14px;
      color: rgba(0, 0, 0, .4);
    }
?
    .next {
      text-align: center;
      margin: 20px 0;
    }
?
    .next button {
      width: 100%;
      height: 45px;
      padding: 0;
      margin: 0;
      background: #007BFF;
      color: #fff;
      border: 0;
      outline: none;
      border-radius: 3px;
    }
    
    .content2{
      display:none;
    }
  style>
head>
<body>
  <div class="modal_content content1">
    <h5>用户登录h5>
    <div>
      <label for="phone1">手机号:label><br />
      <input id="phone1" type="text" autocomplete="off" placeholder="请输入手机号" />
    div>
    <div>
      <label for="code1">验证码:label>
      <div class="code1">
        <input id="code1" type="text" autocomplete="off" placeholder="短信验证码" />
        <input id="btnSendCode1" type="button" class="btn btn-default" value="获取验证码" onClick="sendMessage1()" />
      div>
    div>
    <div class="next">
      <button onClick="binding()">确定button>
    div>
  div>
  
  <div class="modal_content content2">
    <h5>新增数据h5>
    <div>
      <label for="text1">文本:label><br />
      <input id="text1" type="text"  placeholder="请输入新增的数据" />
    div>
    <div class="next">
      <button onClick="add()">确定button>
    div>
  div>
?
  <script src="https://cdn.bootcdn.net/ajax/libs/jquery/1.9.1/jquery.js">script>
  <script src="//imgcache.qq.com/qcloud/tcbjs/1.7.1/tcb.js">script>
  <script src="//unpkg.com/@cloudbase/extension-sms/built/index.umd.js">script>
  <script>
    const app = tcb.init({
      env: 'env-jftmiosg'
    });
    const auth = app.auth();
    var db = app.database();
    tcb.registerExtension(window.extSms);
    islogin();
    var phoneReg = /(^1[3|4|5|7|8]\d{9}$)|(^09\d{8}$)/;//手机号正则 
    var count = 60; //间隔函数,1秒执行
    var InterValObj1; //timer变量,控制时间
    var curCount1;//当前剩余秒数
?
    function islogin(){
      if (auth.hasLoginState()) {
      // 此时已经登录
        $(".content1").hide();
        $(".content2").show();
        return true;
      }
      return false;
    }
?
    /*第一*/
    async function sendMessage1() {
      curCount1 = count;
      var phone = $.trim($('#phone1').val());
      if (!phoneReg.test(phone)) {
        alert(" 请输入有效的手机号码");
        return false;
      }
      //设置button效果,开始计时
      $("#btnSendCode1").attr("disabled", "true");
      $("#btnSendCode1").val(+ curCount1 + "秒再获取");
      InterValObj1 = window.setInterval(SetRemainTime1, 1000); //启动计时器,1秒执行一次
      //向后台发送处理数据
      try {
        await tcb.invokeExtension(extSms.name, {
          action: 'Send',
          app,
          phone
        });
      } catch (err) {
        console.log(JSON.stringify(err, null, 4));
      }
    }
    
    function SetRemainTime1() {
      if (curCount1 == 0) {
        window.clearInterval(InterValObj1);//停止计时器
        $("#btnSendCode1").removeAttr("disabled");//启用按钮
        $("#btnSendCode1").val("重新发送");
      }
      else {
        curCount1--;
        $("#btnSendCode1").val(+ curCount1 + "秒再获取");
      }
    }
?
    /*提交*/
    async function binding() {
      var phone = $.trim($('#phone1').val());
      var smsCode = $.trim($('#code1').val());
      try {
        await tcb.invokeExtension(extSms.name, {
          action: 'Login',
          app,
          phone,
          smsCode,
        });
        
      } catch (err) {
        console.log(JSON.stringify(err, null, 4));
      } finally {
        //无论try catch结果如何还是继续执行
        if(islogin()){
          alert("登录成功,目前是正式用户");
        }else{
          alert("登录失败,请检查验证码");
        }
      }
    }
?
    async function add() {
      try {
        var text = $.trim($('#text1').val());
        await db.collection("test").add({
          text:text
        }).then(res => {
          alert("数据新增成功");
          console.log(res);
        })
        .catch(e => {
          alert("数据新增失败");
          console.log(e);
        });
      } catch (err) {
        console.log(JSON.stringify(err, null, 4));
      } 
    }
  script>
?
body>
html>

三、上传部署

完成demo编写后,将代码上传至静态网站托管,完成部署。

打开云开发 CloudBase 控制台,打开左侧菜单里的静态网站托管,将刚刚编写的文件sms.html上传。

asp验证码_asp邮箱格式验证_asp.net输入验证

CloudBase CLI 是一个开源的命令行界面交互工具,用于帮助用户快速、方便的部署项目,管理云开发资源。具体安装步骤和使用方法可以访问云开发 CLI 工具文档进行查看。

效果展示

asp验证码_asp.net输入验证_asp邮箱格式验证

asp邮箱格式验证_asp.net输入验证_asp验证码

asp.net输入验证_asp邮箱格式验证_asp验证码

总结

通过上述步骤,利用云开发提供的短信验证码登录扩展能力,配合云开发的SDK在web端很方便的实现了自定义登录并新增数据,大家快去试试吧!

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!