在执行POST请求时,用户不再登录

时间:2014-01-14 18:38:27

标签: node.js express

首先,我对nodejs表达javascript非常新。 我在expressjs有一个应用程序。在loggin之后我设置了req.session.user = user;一切正常,因为我有一个方法restrict(),如果设置或不设置,它会检查req.session.user。

但是,我需要发出系统命令并配置一个路由来处理这个(./ routes / helpers.js):

var exec = require('child_process').exec;
function execChild(cmd, callback){
  var child = exec( cmd,
      function (error, stdout, stderr)
      {output=stdout.replace('\r\n','');
      callback(output);}
)};

和另一个发送命令输出的方法(./routes/helpers.js):

exports.cmd = function(req, res) {
  execChild(req.body.cmd, function(output){
    res.send(output);
  });
}

然后我有了发出请求的方法(./routes/index.js):

exports.cmd = function(req, res){
var request = require('request');
var response;
    request.post({
      url:     'http://localhost:3000/cmd',
      form:    { "cmd": "ls -lR / | grep node" }
    }, function(error, response, body){
      res.render('cmd', {title: 'cmd', resp: body});
    });
};

在app.js中我有:

app.get('/cmd', user.restrict, routes.cmd);
app.post('/cmd', user.restrict, helpers.cmd);

其中user.restrict是以下方法:

exports.restrict = function(req, res, next) {
// console.log(req.session)
if (req.session.user) {
  console.log('OK user logged in')
  next();
} else {
  console.log('ERR user NOT logged in')
  res.redirect('login');
}
}

当我第一次在控制台中访问/ cmd时,我得到(来自限制功能)“OK用户登录”并立即“ERR用户未登录”)

1 个答案:

答案 0 :(得分:0)

您的会话登录有效,因为您的会话存储在cookie中,并且浏览器在其请求标头中传输cookie。如果我正确理解您的流程,那么当您GET /cmd POSTPOST进入应用程序本身。后续的POST来自您的应用,而不是来自您的浏览器。因此,没有会话cookie从您的应用程序传递到自身。通过使用请求库触发它,您将失去登录状态。

请问您为什么要让应用向自己发出{{1}}?您有没有理由不能只使用浏览器中的表单?