服务器端存储验证码,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上面去吗?

请各路大神指点指点

3431402c1bcafac7e7cfb291f3f55629.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值