【问题标题】:Unable to authenticate HTTP GET Request Node.js + Expressjs无法验证 HTTP GET 请求 Node.js + Expressjs
【发布时间】:2017-12-06 22:32:37
【问题描述】:

我尝试使用 Get 请求发送数据,目的地使用 basicauth-middleware 进行身份验证。通过浏览器和源程序进行身份验证(不发送数据)工作正常,我得到一个确认输出,说明它已连接,但问题是源程序使用 GET 和 @987654322 向目标程序发送少量数据@ 但没有收到。

Destination.js

app.use(middleware('user1', 'wordpass'));    

app.use(middleware(function(username, password) {
   const auth = true;
   console.log("PASSWORD ACCEPTED")
   return auth;

}));

app.get('/data', function (req, res){
    console.log(req.query);
    var x = req.query.data1
});

Origin.js

middleware = require('basicauth-middleware');

function auth(){
request.get('http://127.0.0.1:3000', {
    'auth': {
        'username': 'user1',
        'password': 'wordpass',
        'sendImmediately': false
     }
 });
 }

function send_data(){
    //Gets data
    function httpget() {
    var url = "http://127.0.0.1:3000/data?data1="+data['data1']+"&="+data['data2']+"&online=true";
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.open("GET", url, true);
    xmlHttp.send();
    console.log("Sent!")
    return xmlHttp.responseText;
}
auth();
httpget();

}

我尝试过的事情:

  • 切换顺序,这似乎没有任何改变
  • 将 sendImmediately 更改为 false。我最初的想法是它在发送任何数据之前就发送了一些东西,但事实并非如此,因为连接确认在发送请求的同时出现并且数据已经被获取
  • 我看到了 2011 年的 this 帖子,尽管它似乎并不真正具有相关性,而且我的做法也有所不同,但如果我能适应我正在做的事情,那将是了不起的。

我对 node.js 和其中的大部分内容还是很陌生。如果我忘记了任何相关信息,我会确保添加它。

【问题讨论】:

    标签: javascript node.js http express get


    【解决方案1】:

    找到了解决办法。与其使用 XMLHTTP 请求发送 GET 数据,不如随请求一起发送。像这样:

    request.get("http://127.0.0.1:3000/speedtest?upload="+tele_data['upload_speed']+"&download="+tele_data['download_speed']+"&mid="+ config['meraki_id']+"&online=true", {
                'auth': {
                    'username': 'user1',
                    'password': 'wordpass',
                    'sendImmediately': false
                }
    
            });
    

    有问题的代码只允许在该请求函数中发送任何内容,而 XMLHTTP 不是其中的一部分。

    【讨论】:

      【解决方案2】:

      替换

      app.use(middleware(function(username, password) {

      app.use(basicauth(function(username, password) {

      【讨论】:

      • basicauth 未定义。 var 被设置为中间件。相应地更新了帖子。
      • 您的代码现在在控制台中有输出“PASSWORD ACCEPTED”吗?
      • 是的。 PASSWORD ACCEPTED 是前面提到的确认输出。我假设这意味着建立了连接并进行了身份验证,但没有发送任何数据。发送数据后,它会在控制台中打印出来。
      • 你的Destination.js中没有发送数据,能否提供完整代码?
      • 抱歉,我在帖子中打错字了,在 xmlhttp.open 正下方有一个 xmlHttp.send。针对 Origin.js 进行了相应的编辑。 Destination.js 没有发送任何数据,但我也添加了一些关于它如何处理输入数据的内容。
      猜你喜欢
      • 2012-03-23
      • 1970-01-01
      • 2015-04-19
      • 2011-12-05
      • 1970-01-01
      • 2017-07-23
      • 1970-01-01
      相关资源
      最近更新 更多