使用node+redis通过手机短信验证码方式开发注册接口

简介:使用node+redis通过手机短信验证码方式开发注册接口开发

  • 在数据层接收控制层传递过来的手机号以及验证码进行逻辑处理,具体代码如下:
    // service/UserService.js
    const UserService = {
        register:async (phone,code)=>{
            // 手机号注册查重
            let existPhone = await DB.Account.findAll({where:{phone}})
            if(existPhone.length>0) {
                return {code:-1,msg:'手机号已经注册'}
            }
            // 获取redis中的验证码和用户传入的对比是否一致
            if(await redisConfig.exists('register:code:'+phone)){
                let codeRes = (await redisConfig.get('register:code:'+phone)).split('_')[1]
                if(!(code==codeRes)) {
                    return {code:-1,msg:'短信验证码不正确'}
                }
            } else {
                return {code:-1,msg:'请先获取短信验证码'}
            }
    
            // 随机生成头像和昵称
            let avatar = RandomTool.randomAvatar()
            let name = RandomTool.randomName()
    
            // 生成token,7天后过期
            let user = {avatar,name,phone}
            let token = SecretTool.jwtSign(user,'168h')
    
            // 将用户信息插入数据库
            await DB.Account.create({username:name,head_img:avatar,phone})
            return {code:0,data:`Bearer${token}`}
        }
    }
    
  • 在utils定义随机生成头像和名字的函数
    	// utils/randomTool.js
    	// 随机生成头像
    static randomAvatar() {
    let imgList = [
      "https://xd-video-pc-img.oss-cn-beijing.aliyuncs.com/xdclass_pro/default/head_img/10.jpeg",
      "https://xd-video-pc-img.oss-cn-beijing.aliyuncs.com/xdclass_pro/default/head_img/11.jpeg",
      "https://xd-video-pc-img.oss-cn-beijing.aliyuncs.com/xdclass_pro/default/head_img/12.jpeg",
      "https://xd-video-pc-img.oss-cn-beijing.aliyuncs.com/xdclass_pro/default/head_img/13.jpeg",
      "https://xd-video-pc-img.oss-cn-beijing.aliyuncs.com/xdclass_pro/default/head_img/14.jpeg",
      "https://xd-video-pc-img.oss-cn-beijing.aliyuncs.com/xdclass_pro/default/head_img/15.jpeg",
      "https://xd-video-pc-img.oss-cn-beijing.aliyuncs.com/xdclass_pro/default/head_img/16.jpeg",
      "https://xd-video-pc-img.oss-cn-beijing.aliyuncs.com/xdclass_pro/default/head_img/17.jpeg",
      "https://xd-video-pc-img.oss-cn-beijing.aliyuncs.com/xdclass_pro/default/head_img/18.jpeg",
      "https://xd-video-pc-img.oss-cn-beijing.aliyuncs.com/xdclass_pro/default/head_img/19.jpeg",
    ];
    let num = Math.floor(Math.random() * 10);
    return imgList[num];
    }
    
    // 随机生成昵称
    static randomName() {
    let name = [
      "编程小白23423",
      "编程小白94352",
      "编程小白46597",
      "编程小白46236",
      "编程小白73453",
      "编程小白07848",
      "编程小白44462",
      "编程小白36688",
      "编程小白23665",
      "编程小白84562",
    ];
    let num = Math.floor(Math.random() * 10);
    return name[num];
    }
    
  • 在控制层接收前端传递过来的手机号以及验证码并调用数据层的方法传递过去进行逻辑处理
    	const UserService = require('../service/UserService.js')
    	
    	const UserController = {
    	    register:async (req,res)=>{
    	        let {phone,code} = req.body 
    	        let handleRes =  await UserService.register(phone,code)
    	        res.send(handleRes)
    	    }
    	}
    	
    	module.exports = UserController
    
  • 大功告成,可以在APIFOX上进行测试,也可给前端进行调用,需要注意以下几点:
    • 前端页面需要先填写手机号和验证码
    • 验证码的有效期为120秒,可以自己定义
    • 已经注册过的手机不能再进行注册
    • 以下是注册成功的截图,仅供参考,有疑问欢迎私信我!
      在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值