captcha存入session,login判断时为undefined?

// app.js
app.use(session({
  name: 'mysite',
  secret: 'mysite',
  cookie: 2592000000,
  store: new MongoStore({
    url: 'mongodb://localhost:27017/ad_system'
  })
}));

// captcha
exports.captcha = (req, res, next) => {
  var ary = ccap.get();
  var text = ary[0];
  var buf = ary[1];
  req.session.captcha = text;
  res.end(buf);
};

// login 判断captcha部分代码
exports.login = (req, res, next) => {
  var json = {},
      username = req.body.username,
      password = req.body.password,
      captcha = req.body.captcha,
      rememberMe = req.body.rememberMe;

  if (username === '' || password === '') {
    json = {
      status: 0,
      msg: '请输入用户名和密码'
    };
    return res.json(json);
  }
  console.log(req.session.captcha); // undefined
  if (req.session.captcha !== captcha) {
    json = {
      status: -1,
      msg: '请输入正确的验证码'
    }
    return res.json(json);
  }
  User.findOneAsync({
    username,
    password: crypts.sha256(password)
  })
  .then((result) => {
    if (result) {
      var id = result._id,
          remember_me = req.body.remember_me ? 2592000000 : 86400000,
          token = crypts.sha256(id + '|' + username)
      res.cookie('user', token, { maxAge: remember_me });
      res.cookie('userid', token, { maxAge: remember_me });
      res.cookie('username', token, { maxAge: remember_me });
      req.session.user = username;
      req.session.isLogin = true;
      json = {
        status: 1,
        msg: '登录成功',
        token: token
      }
    } else {
      json = {
        status: 0,
        msg: '用户名密码错误'
      }
    }
    res.json(json)
  }).catch(err => {
    res.json({
      status: 0,
      msg: err.toString()
    })
  })
};

// routes
router.post('/login', (req, res, next) => {
  user.login(req, res, next);
});

router.get('/captcha', (req, res, next) => {
  user.captcha(req, res, next);
});

为什么req.session.captcha是undefined?

阅读 5.5k
2 个回答

结贴了,是因为我用的vue-cli的proxyTable转发了,接口是通过这个转发了,但captcha是img设置src直接访问,所以造成两个session了。

代码不足, 没办法准确判断. 说一下解决逻辑.

  1. 打印req.session, 输出结果是不是undefined. 是, 进入2; 不是, 进入3.

  2. session未配置成功。参考express/session重新配置session.

  3. 在exports.captcha方法中, req.session.captcha赋值之后直接打印, 看输出结果是什么.

  4. 根据3的输出结果再判断.

soonfy

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题