diff --git a/lib/adapters/xhr.js b/lib/adapters/xhr.js index bf90efd..5db1d1e 100644 --- a/lib/adapters/xhr.js +++ b/lib/adapters/xhr.js @@ -23,7 +23,7 @@ module.exports = function xhrAdapter(config) { // HTTP basic authentication if (config.auth) { var username = config.auth.username || ''; - var password = config.auth.password || ''; + var password = unescape(encodeURIComponent(config.auth.password)) || ''; requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password); } diff --git a/test/specs/__helpers.js b/test/specs/__helpers.js index efb4fc6..660ae09 100644 --- a/test/specs/__helpers.js +++ b/test/specs/__helpers.js @@ -76,7 +76,24 @@ setupBasicAuthTest = function setupBasicAuthTest() { }, 100); }); - it('should fail to encode HTTP Basic auth credentials with non-Latin1 characters', function (done) { + it('should accept HTTP Basic auth credentials with non-Latin1 characters in password', function (done) { + axios('/foo', { + auth: { + username: 'Aladdin', + password: 'open ßç£☃sesame' + } + }); + + setTimeout(function () { + var request = jasmine.Ajax.requests.mostRecent(); + console.log(request.requestHeaders['Authorization'], '\n\n\n'); + + expect(request.requestHeaders['Authorization']).toEqual('Basic QWxhZGRpbjpvcGVuIMOfw6fCo+KYg3Nlc2FtZQ=='); + done(); + }, 100); + }); + + it('should fail to encode HTTP Basic auth credentials with non-Latin1 characters in username', function (done) { axios('/foo', { auth: { username: 'Aladßç£☃din',