【问题标题】:Can´t get the current express session无法获取当前的快速会话
【发布时间】:2017-02-01 04:59:17
【问题描述】:

我想设置和检索当前登录用户的会话,所以我做了这样的事情:

router.post('/login', function (req, res) {
  if (JSON.stringify(req.body) == "{}") {
    return res.status(400).json({ message: "corpo vazio" });
  }

  if (!req.body.email) {
    return res.status(400).json({ message: "tem que especificar um email" });
  }

  if (!req.body.password) {
    return res.status(400).json({ message: "tem que especificar uma password" });
  }

  Loja.findOne({ email: req.body.email }, function (err, loja) {
    if (!loja) {
      return res.status(404).json({ message: "login invalido" });
    }
    if (loja.password != req.body.password) {
      return res.status(400).json({ message: "password invalida" });
    }
    if (err) {
      return res.status(500);
    }
    // se tudo correr bem guarda a sessao do utilizador
    req.session.loja = loja;
    return res.send(req.session.loja);
  });
});

然后要检索会话,我会这样做:

router.get('/confirm-login',function(req,res){
  return res.send(req.session.loja);
});

我们试过了,第一个效果很好,它向我发送了一个包含需要存储的完整对象的响应,但是当我在邮递员处点击确认登录时,它向我发送了一个空响应:S,我做错了什么?

【问题讨论】:

    标签: node.js session express mongoose express-session


    【解决方案1】:

    当你编写这样的路由时,你应该首先检查session 的存在以及你附加到它的东西,否则发送一个正确的响应:

    router.get('/confirm-login',function(req,res){
      if ( req.session && req.session.loja ) {
        res.send(req.session.loja);
      } else {
        res.status(401).send({ status: 'Unauthorized'});
      }
    });
    


    Postman chrome 应用程序无法自行处理 cookie。要使用 cookie,您应该安装一个名为 Postman Interceptor 的 chrome 扩展程序(参见 Documentation)。 因此,如果您使用的是 chrome 应用程序,请确保您已安装此扩展程序并将其打开(启用)。

    【讨论】:

    • 谢谢,解决了部分问题,我现在得到了会话,它与cookie解析器有关,现在我有其他问题当用户登录时如何获取会话?
    猜你喜欢
    • 2017-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 2014-11-28
    • 2018-08-22
    • 2017-01-18
    相关资源
    最近更新 更多