egg.js liga para o serviço de código de verificação SMS do Alibaba Cloud (Alibaba)

1. Abra o serviço Alibaba Cloud SMS

Alibaba Cloud Login - Bem-vindo ao Alibaba Cloud, uma plataforma de serviços de computação em nuvem segura e estável

Você pode solicitar 200 códigos de verificação SMS corporativos gratuitamente

O ponto é:

Nome da assinatura: Ao receber o conteúdo do código de verificação, o texto em 【】.

Código do modelo de SMS: equivalente ao id do conteúdo do SMS.

pode aplicar

Se o aplicativo for bem-sucedido, você pode tentar testar uma mensagem de texto no endereço abaixo.

SendSms_SMS service_API depuração-Alibaba Cloud OpenAPI Developer Portal

2. Inicie o back-end do ovo

Eu uso egg-sms  GitHub - yolopunk/egg-sms: aliyun sms plugin for egg

npm i egg-sms --save
// {app_root}/config/plugin.js
sms: {
    enable: true,
    package: 'egg-sms'
}
{app_root}/config/config.default.js
config.sms = {
    client: {
      accessKeyId: 'id', //阿里云的
      secretAccessKey: 'key'  //阿里云的
    }
  }

exemplo

  // {app_root}/app/controller/sms.js
  ...
  async send () {
    await this.ctx.sms.sendSMS({
      PhoneNumbers: '1500000000',
      SignName: '云通信产品',
      TemplateCode: 'SMS_000000',
      TemplateParam: '{"code":"12345"}'
    })
  }
  ...

Desenvolvimento da camada do controlador de back-end

roteamento

router.post('/pc/user/captch', controller.pc.user.captch);//发送验证码

O back-end usa redis para salvar as informações do código de verificação por 60s e o back-end exclui automaticamente os dados 

async captch() {
        const { ctx, app } = this;
        //参数验证 //2.验证手机号码合法性
        ctx.validate({
            mobile: { 
                type: 'phone',
                trim: true,
                required: true, 
                desc: '手机号' 
            },
        });
        //1.接收手机号码
        const { mobile } = ctx.request.body;
        
        //3.判断是否已经获取过验证码(判断缓存中是否存在当前手机号的验证码,有则提示"你已经获取过验证码了"),防止别有用心之人频繁验证,避免短信费用过高
        let has = await ctx.service.cache.get('sms_' + mobile);
        if (has) {
            ctx.throw(200, '您已获取过验证码了');
        }

        //4.生成4~6位数随机数字 生成六位随机验证码
        let smscode = Math.random().toString().slice(-6);
        
        //5.发送短信(阿里大于)
        let res = await ctx.sms.sendSMS({
            PhoneNumbers: mobile, //手机号码
            SignName: 'xxxxx', //签名
            TemplateCode: 'SMS_xxxxxx',// 模板
            TemplateParam: `{"code":'${smscode}'}`
        })
        //6.手机号=>验证码的形式保存在缓存中(60秒)
        if (!await this.service.cache.set('sms_' + mobile, smscode, 60 * 5)) {
            ctx.throw(200, '验证失败');
        }

        //7.提示成功
        ctx.apiSuccess(res);
    }

O efeito do sucesso é

O efeito da página, o código front-end não é exibido, inclusive, o código de verificação inserido pelo usuário ao fazer login é comparado com o código de verificação redis

Acho que você gosta

Origin blog.csdn.net/deng_zhihao692817/article/details/128917710
Recomendado
Clasificación