diff --git a/packages/node_modules/@node-red/nodes/core/network/21-httprequest.js b/packages/node_modules/@node-red/nodes/core/network/21-httprequest.js index e6c31bfaa..a498d4ac7 100644 --- a/packages/node_modules/@node-red/nodes/core/network/21-httprequest.js +++ b/packages/node_modules/@node-red/nodes/core/network/21-httprequest.js @@ -207,12 +207,23 @@ module.exports = function(RED) { } if (this.credentials) { if (this.authType === "basic") { + // Workaround for https://github.com/sindresorhus/got/issues/1169 + var cred = "" + var parsedURL = new URL(url) if (this.credentials.user) { - opts.username = this.credentials.user; + // opts.username = this.credentials.user; + cred = this.credentials.user + } else if (parsedURL.username) { + cred = parsedURL.username } if (this.credentials.password) { - opts.password = this.credentials.password; + // opts.password = this.credentials.password; + cred += ":" + this.credentials.password + } else if (parsedURL.password) { + cred += ":" + parsedURL.password } + // build own basic auth header + opts.headers.Authorization = "Basic " + Buffer.from(cred).toString("base64"); } else if (this.authType === "digest") { let digestCreds = this.credentials; let sentCreds = false; diff --git a/test/nodes/core/network/21-httprequest_spec.js b/test/nodes/core/network/21-httprequest_spec.js index d00dd5043..c37265d1c 100644 --- a/test/nodes/core/network/21-httprequest_spec.js +++ b/test/nodes/core/network/21-httprequest_spec.js @@ -1624,6 +1624,26 @@ describe('HTTP Request Node', function() { n1.receive({payload:"foo"}); }); }); + it('should authenticate on server - basic', function(done) { + var flow = [{id:"n1",type:"http request",wires:[["n2"]],method:"GET",ret:"obj",url:getTestURL('/authenticate')}, + {id:"n2", type:"helper"}]; + helper.load(httpRequestNode, flow, function() { + var n1 = helper.getNode("n1"); + var n2 = helper.getNode("n2"); + n1.credentials = {user:'foo@example.com', password:'passwordfoo'}; + n2.on("input", function(msg) { + try { + msg.should.have.property('statusCode',200); + msg.payload.should.have.property('user', 'foo@example.com'); + msg.payload.should.have.property('pass', 'passwordfoo'); + done(); + } catch(err) { + done(err); + } + }); + n1.receive({payload:"foo"}); + }); + }); it('should authenticate on server - bearer', function(done) { var flow = [{id:"n1",type:"http request",wires:[["n2"]],method:"GET",ret:"obj",authType:"bearer", url:getTestURL('/authenticate')}, {id:"n2", type:"helper"}];