使用POST的NodeJS express认证返回错误,在发送后不能设置报头

NodeJS express Authentication using POST returns Error Cannot Set Headers After they Are Sent

本文关键字:不能 报头 设置 错误 POST NodeJS express 返回 认证 使用      更新时间:2023-09-26

我正在尝试使用post建立一个基本认证

 app.post("/api/auth",function(req,resp)
 {
   var username = req.body.username||req.param('username');
   var password = req.body.password||req.param('password');
   log("Performing Log Check");
   log(username + " "+password);
     var sent ={};
     sent.status =false;
     sent.authenticated = false;
     var query = {}
     query.sql= "SELECT * FROM voix_auth";
     query.timeout= 4000; // 40s
     connection.query(query, function (error, rows, fields)
     {
       if(!error)
       {
           var i=0;
           while(i!=rows.length)
           {
               if(rows[i].username  == username  &&  rows[i].password == password)
               {
                 log(rows);
                 sent.status = true;
                 sent.authenticated = true;
                 sent.token = tokenData;
                 log(sent);
                 break;
               }
             i+=1;
            }
          resp.send(sent);
         }  //Error Ends
         else
         {
           log("Error Occured");
         }
      });  //connection Query
      log(sent);
      resp.send(sent);
  });

这里的问题是,我得到不能设置头后,他们被发送。因此,当我删除resp.send()时,这个错误就消失了。

但是如果我得到的响应总是false,即使用户是Authenticated。

请帮助。

你不能发送多个回复。

需要改变的地方

  • 将查询更改为select ONLY_STUFF_YOU_NEED from table where username & passwords match之类的内容。注意sql注入

  • 将查询封装在一个函数中,只有当auth匹配时才返回一个有效的user对象。将其移出控制器。示例+无耻插头- https://github.com/swarajgiri/express-bootstrap/tree/master/core

  • 验证完成后,使用res.send

  • 发送响应