egg.js服务端如何将验证码保存在session
问题:服务端生成验证码,自己将验证码的value到session, 图片验证码给前端,前端点击登录,传递验证码的value到服务器,服务器从session获取到value与前端传进来的value进行比较,实现登录。问题出在 服务器从session无法获取到value,打印出来是undefined
async getCode() {
const { ctx } = this;
let codeInfo = svgCaptcha.create({
width: 120,
height: 40,
size: 4, // 验证码长度
ignoreChars: '012iIlLoOzZ', // 验证码字符中排除
noise: 3, // 干扰线条的数量
color: true, // 验证码的字符是否有颜色,默认没有,如果设定了背景,则默认有
background: '#d8e3e7', // 验证码图片背景颜色
});
ctx.session.login_code = codeInfo.text
console.log(ctx.session.login_code) // undefined
console.log(ctx.session) // {}
ctx.body = {
success: 1,
message: '',
data: {
data: codeInfo.data
}
}
}
async login() {
const { ctx, app } = this;
const { code, type } = ctx.request.body
const username = ctx.request.body.username
const password = ctx.request.body.password
console.log(ctx.session.login_code)
if (type === 1) {// 表示登录
if (code === ctx.session.login_code) {
ctx.body = await ctx.service.user.login(username, password)
} else {
ctx.body = {
success: 0,
message: "验证码错误",
ctx: ctx
}
}
}
之后我尝试了两种方法:
一、https://segmentfault.com/q/10...
我也看了这篇文章,解答还是指引去看文档,但是我要做的仅仅是将验证码存在session,之后再取出来,似乎看这个官方文档,没多大作用
二、尝试使用egg-session插件,按照npm上的操作步骤,设置如下:
// app.js
module.exports = app => {
// set redis session store
// session store must have 3 methods
// define sessionStore in `app.js` so you can access `app.redis`
app.sessionStore = {
async get(key) {
const res = await app.redis.get(key);
if (!res) return null;
return JSON.parse(res);
},
async set(key, value, maxAge) {
if (!maxAge) maxAge = 24 * 60 * 60 * 1000;
value = JSON.stringify(value);
await app.redis.set(key, value, 'PX', maxAge);
},
async destroy(key) {
await app.redis.del(key);
},
};
};
但是我在我的getCode函数里面无法使用app.sessionStore.set("login_code", login_code),
就连app.sessionStore都是undefined,难道是我这个sessionStore对象没有挂载到app上面去吗?
请各路大神指点指点
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
可以看一下你的项目目录吗 我按照教程使用是没有问题的
后来修改如下,可以从session获取到之前存储的验证码,好像和前面我的操作没什么区别
如下代码,可以进行session验证码的存储和获取。