请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

请问,在auth.js的中间件中,获取的ctx.session是空对象,这是怎么回事?

请问,在auth.js的中间件中,获取的ctx.session是空对象,并没有像视频中那样获取到值,这是怎么回事?

module.exports = options => {
  return async (ctx, next) => {
    const url = ctx.request.url;
    const user = ctx.username;
    // console.log("user1==>", JSON.stringify(ctx.session)); 此处为空对象??
    if(!user && !options.exclude.includes(ctx.request.url.split('?')[0])) {
      ctx.body = {
        status: 1001,
        errMsg: '用户未登录'
      }
    }else {
      await next();
    }
  }
}

正在回答 回答被采纳积分+3

2回答

提问者 Allen_Liu986 2020-10-16 00:33:39

egg项目启动地址为本机ip地址:192.168.*.***
前端项目自带的启动地址为:localhost 或者 127.0.0.1都不行。只要将地址也设为ip启动即可。
同时,在config.default.js设置config.cors配置项,允许跨域即可

config.cors = {
credentials: true, // 支持cookie跨域
origin: 'http://192.168.*.***:8080', // 这里的地址要配置具体的客户端地址,* 会有问题,另外:如果是App这种,内部使用的file协议,那么file请求接口是不会有跨域问题的
allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH'
};


0 回复 有任何疑惑可以回复我~
夏小宅 2020-10-15 18:08:51

登录、注册时候没有添加session吧;上面的代码是第九章完成后的代码,"9-9 优化用户登录验证插件" 这个小节里面用的还是session,9-10之后才替换成redis,可以jwtSign这个方法里面,例如:ctx.session[username]=username

0 回复 有任何疑惑可以回复我~
  • 提问者 Allen_Liu986 #1
    登录的时候向session中存了值,存值以后可以打印出来。然后代码运行到auth.js的中间件时,在获取session就是空对象
    回复 有任何疑惑可以回复我~ 2020-10-15 19:02:33
  • 夏小宅 回复 提问者 Allen_Liu986 #2
    可以检查下session的过期时间maxAge,将其设置的大一点
    回复 有任何疑惑可以回复我~ 2020-10-15 19:36:05
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信