关与使用redis储存图像验证码的问题
来源:4-4 Redis实战应用配置-BlueBird
慕雪9296518
2021-02-26 16:32:06
首先课堂中bluebird好像已经没法用了,回到redis,发现一个很严重的问题
1)redis保存了当时图像验证码的实际验证码,但是由于异步的原因,发给前端的时候,redis居然还没储存完成,也就是说前端输入的快时候,服务端校验时甚至可能容redis中提取不出数据
2)也是异步导致的,客户端发来数据的时候,由于getvalue是异步的,还没有查到redis的验证码,
导致输出了[object Promise],这样直接返回验证失败
求解决方式
1回答
Brian
2021-02-28
关于bluebird可以参考:
版本: https://git.imooc.com/class-70/toimc-api/src/master/package.json#L23
官方文档: http://bluebirdjs.com/docs/api/promise.promisifyall.html
除了上面的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
相似问题