Vue+Egg.js使用阿里云短信服务发送验证码保姆教程

1、进入阿里云官网,搜索短信服务点击免费开通

 快速学习,我这边全部学习完成,新用户需要先申请签名。

2、 申请签名

*签名:签名最好使用你的真实应用名或者真实姓名,例如:李四的博客,使用你的项目名有可能会审核不通过。

*签名来源:学生这边就选择测试或学习

*适用场景:选择验证码就好了

*场景链接和签名一样就好了

*场景说明:可以说明在登录或者注册时使用验证码

填写完成后选择提交,等待审核就好了,审核通过会给你发送短信。

3、申请模板

*关联签名:选择你之前审核通过的签名

*模板名称:可以自定义,也可以跟之前的签名一样

*场景链接和*场景说明和之前一样就好了

选择完成点击添加等待审核通过

 国内消息也可以查看已经通过审核和未通过审核的签名和模板

接下来需要申请key

安全提示选择继续使用就好了,

点击创建AccessKey

 在国内消息->模板管理->详情查看自己的模板CODE,后面代码里面需要用到

 

在egg.js项目controller层中创建alisms.js,controller层具体代码

 service>alisms.js

const Service = require('egg').Service;
const SMSClient = require('@alicloud/sms-sdk');
const config = {
  AccessKeyId: '您的秘钥', //秘钥编号
  AccessKeySecret: '您的秘钥', //秘钥
};
const sign = {
  SignName: '您的签名', //签名
  TemplateCode: '您的模板CODE', //模板CODE
};
class AlismsService extends Service {
  async getRandomNum() {
    let num = '';
    for (var i = 0; i < 4; i++) {
      num += Math.floor(Math.random() * 10);
    }
    return num;
  }
  async sendnote(tel) {
    const { ctx, app } = this;
    const codeRandom = await this.getRandomNum(); //获取随机数
    const templateParams = JSON.stringify({ code: codeRandom.toString() });

    const accessKeyId = config.AccessKeyId;
    const secretAccessKey = config.AccessKeySecret;
    const smsClient = new SMSClient({ accessKeyId, secretAccessKey });
    var params = {
      SignName: '您的签名',
      TemplateCode: '您的模板CODE',
      PhoneNumbers: `${tel}`,
      // `"code":"${codeRandom}"`
      TemplateParam: `{\"code\":\"${codeRandom}\"}`,
    };
    var getphone = await this.gettel(tel);
    if (getphone != '') {
      let result = await ctx.model.Users.findOne({
        where: { telephone: tel, status: 0 },
      });
      if (result) {
        let user_username = result.username;
        let user_id = result.id;
        var token = app.jwt.sign(
          { user_username, user_id },
          app.config.jwt.secret
        );
      } else {
        return { msg: '使用该手机号的用户已被封禁!', sta: -1 };
      }
      // console.log('params', params);
      try {
        const rs = await this.sendSms(smsClient, params);
        console.log('res.code=======', rs);
        if (rs.Code === 'OK') {
          ctx.session.smscode = JSON.parse(params.TemplateParam).code;
          return { user: getphone, code: codeRandom, data: token, sta: 1 };
        }
        return { msg: '发送失败!', sta: -1 };
      } catch (err) {
        // 短信限制
        console.log(err);
        if (err.data.Code === 'isv.BUSINESS_LIMIT_CONTROL') {
          return { msg: err.data.Message.match(/(\s*)Permits/)[1], sta: 0 };
        }
        return { msg: '只能向已回复授权信息的手机号发送!', sta: -1 };
      }
    } else {
      return { msg: '电话号不存在!', sta: -1 };
    }
  }
  // 发送短信
  /**
   *
   * @param {*} smsClient SDK实例
   * @param {*} params 参数信息
   * @returns
   */
  sendSms(smsClient, params) {
    console.log('smsClient', smsClient);
    console.log('params', params);
    return new Promise((resolve, reject) => {
      smsClient.sendSMS(params).then(
        (result) => {
          resolve(result);
        },
        (ex) => {
          reject(ex);
        }
      );
    });
  }
  // 判断电话号码是否存在
  async gettel(tel) {
    const ctx = this.ctx;
    let phone = await ctx.app.mysql.query(
      `select * from t_users where telephone = ${tel}`
    );
    if (phone != undefined) {
      return phone;
    } else {
      return false;
    }
  }
}

module.exports = AlismsService;

 前端页面:

 

data中的数据

        getstatus: false,    判断是否获取验证码成功,成功则显示几秒后重新获取。

        time:' '                   倒计时,几秒后获取

 methods:

async gettelcode() {
      if (this.telephone == '') {
        this.$message.error('请填写手机号!');
        return;
      }
      let res = await this.$http.post('/sendalinote', {
        telephone: this.telephone,
      });
      if (res.data.sta == -1) {
        console.log(res.data.msg);
        this.$message.error(res.data.msg);
        return;
      } else if (res.data.sta == 1) {
        this.getstatus = true;
        this.time = 60;
        var timer = setInterval(() => {
          this.time--;
          if (this.time <= 0) {
            clearInterval(timer);
            this.getstatus = false;
          }
        }, 1000);
        this.$message.success('发送验证码成功!');
        this.code = res.data.code;
        this.token = res.data.data;
        this.user = res.data.user[0];
      }
    },

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值