美文网首页
【REDIS】EGGJS中使用Redis实现短信验证功能

【REDIS】EGGJS中使用Redis实现短信验证功能

作者: 度一特 | 来源:发表于2020-10-09 00:11 被阅读0次

一、什么情况下会用到Redis?

1、高并发的情况

读写并发的请求过大,需要一个缓存空间换时间,比如 抢购下的写订单,假如5000/s甚至更高,数据库处理不过来,响应时间过慢,这个时候加redis缓存订单,然后多线程异步写,会比一堆请求往数据库阻塞在那里好。同理读也是一样的,就是用空间换时间

2. 一些需要超时失效的数据

比如session、Token(验证)、短信验证码等

二、以需要超时失效(短信验证)的数据举例

短信验证

1、短信验证码发送给用户,需要在服务器留存记录
2、用户需要再一定时间(比如5分钟)输入短信验证码
3、服务器对用户提交的验证码进行比对,如果超时,就提示用户重新获取,如果正确,就记录用户的登录信息

三、REDIS初始化

1、在centos下安装redis
【REDIS】在CentOS环境下使用yum快速安装Redis

2、npm

npm i egg-session-redis egg-redis --save

3、plugin.js

// {app_root}/config/plugin.js
    sessionRedis: {
        enable: true,
        package: 'egg-session-redis',
      },
      redis: {
        enable: true,
        package: 'egg-redis',
  },

4、config.default.js

config.redis = {
        client: {
          host: process.env.EGG_REDIS_HOST || '127.0.0.1',
          port: process.env.EGG_REDIS_PORT || 6379,
          password: process.env.EGG_REDIS_PASSWORD || '',
          db: process.env.EGG_REDIS_DB || '0',
        },
  };

四、REDIS的具体代码部分

实现方式很简单,将返回的smsid和验证码直接放到redis中,然后设定一个超时的时间。
在用户提交的时候,到redis取得,如果redis不存在,就表明超时了。如果存在就进行验证,验证短信码是否正确。

备注:验证码部分不在此文进行描述。

  1. 在发送短信验证码的地方记录短信信息
let smsid;        // 发送短信返回的id值
let randcode;  // 自动生成的随即六位验证码
// .....略
const expIn = 60 * 5; // 如果5分钟不输入,就过期
await this.app.redis.set('vc-' + smsid, randcode, 'ex', expIn);
  1. 提交短信验证码进行验证
const smsauth = ctx.request.body.smsauth;
    let code = 'OK';
    let message = '';
    const token = {};
    const mobile = smsauth.mobile;
    const smsid = smsauth.smsid;
    const smscode = smsauth.smscode;
  
    const redis_vc = await this.app.redis.get('vc-' + smsid); 
   
    if (redis_vc === null) {
      code = 'ERROR';
      message = '超时,请重新获取验证码。';
    } else if (redis_vc === smscode) {
      // 检查是否存在user,如果没有就添加
       code = 'SUCCESS';
       message = '登陆成功';
    } else {
      code = 'ERROR';
      message = '验证码错误,请重新输入';
    }

注:redis真正的优势是在高并发的情况。

相关文章

网友评论

      本文标题:【REDIS】EGGJS中使用Redis实现短信验证功能

      本文链接:https://www.haomeiwen.com/subject/umhhpktx.html