关与使用redis储存图像验证码的问题

来源:4-4 Redis实战应用配置-BlueBird

慕雪9296518

2021-02-26 16:32:06

首先课堂中bluebird好像已经没法用了,回到redis,发现一个很严重的问题

1)redis保存了当时图像验证码的实际验证码,但是由于异步的原因,发给前端的时候,redis居然还没储存完成,也就是说前端输入的快时候,服务端校验时甚至可能容redis中提取不出数据

2)也是异步导致的,客户端发来数据的时候,由于getvalue是异步的,还没有查到redis的验证码,

导致输出了[object Promise],这样直接返回验证失败

http://img.mukewang.com/climg/6038b1fa09102da508540144.jpg

求解决方式​

写回答

1回答

Brian

2021-02-28

关于bluebird可以参考:

  1. 版本: https://git.imooc.com/class-70/toimc-api/src/master/package.json#L23

  2. 官方文档: http://bluebirdjs.com/docs/api/promise.promisifyall.html

  3. 除了上面的bluebird,课程中还介绍了使用node的原生模块的用法。


1)redis保存了当时图像验证码的实际验证码,但是由于异步的原因,发给前端的时候,redis居然还没储存完成,也就是说前端输入的快时候,服务端校验时甚至可能容redis中提取不出数据

——验证码是在用户来到登录页的时候进行请求的,请求是先于用户输入,如果用户输入完成了,请求还未完成,那就需要看看是不是服务器端的问题。毕竟,人(非机器)的输入不可能会超过这个响应时间,这也是开发验证码的一个作用:防机器登录~


2)也是异步导致的,客户端发来数据的时候,由于getvalue是异步的,还没有查到redis的验证码,

导致输出了[object Promise],这样直接返回验证失败

——这个结果说明getValue应该是正常返回了,你可以加一个.then方法,在then方法中进行后续逻辑处理;或者,使用async await的方法,异步获取redis的数据后,再进行后续逻辑处理。参考:https://git.imooc.com/class-70/toimc-api/src/master/src/common/Utils.js#L36


0

0 学习 · 1842 问题

查看课程