javascript - captcha存入session,login判断时为undefined?
怪我咯
怪我咯 2017-04-11 12:53:34
[JavaScript讨论组]
// 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?

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号