From 36c3f4a9e93016e6da2fdf17db6b4b9b9b170316 Mon Sep 17 00:00:00 2001 From: yuzeh Date: Mon, 18 Jul 2016 18:15:07 -0700 Subject: [PATCH] don't serve null authData values --- spec/ParseUser.spec.js | 21 +++++++++++++++++++++ src/RestQuery.js | 11 +++++++++++ 2 files changed, 32 insertions(+) diff --git a/spec/ParseUser.spec.js b/spec/ParseUser.spec.js index d2daa46e1a..16d7e99685 100644 --- a/spec/ParseUser.spec.js +++ b/spec/ParseUser.spec.js @@ -2257,6 +2257,27 @@ describe('Parse.User testing', () => { }) }); + it_exclude_dbs(['postgres'])('should not serve null authData keys', (done) => { + let database = new Config(Parse.applicationId).database; + database.create('_User', { + username: 'user', + _hashed_password: '$2a$10$8/wZJyEuiEaobBBqzTG.jeY.XSFJd0rzaN//ososvEI4yLqI.4aie', + _auth_data_facebook: null + }, {}).then(() => { + return new Parse.Query(Parse.User) + .equalTo('username', 'user') + .first({useMasterKey: true}); + }).then((user) => { + let authData = user.get('authData'); + expect(user.get('username')).toEqual('user'); + expect(authData).toBeUndefined(); + done(); + }).catch((err) => { + fail('this should not fail'); + done(); + }) + }); + it_exclude_dbs(['postgres'])('should cleanup null authData keys ParseUser update (regression test for #1198, #2252)', (done) => { Parse.Cloud.beforeSave('_User', (req, res) => { req.object.set('foo', 'bar'); diff --git a/src/RestQuery.js b/src/RestQuery.js index 79a0a94c62..e3569f0f69 100644 --- a/src/RestQuery.js +++ b/src/RestQuery.js @@ -394,6 +394,17 @@ RestQuery.prototype.runFind = function() { if (this.className === '_User') { for (var result of results) { delete result.password; + + if (result.authData) { + Object.keys(result.authData).forEach((provider) => { + if (result.authData[provider] === null) { + delete result.authData[provider]; + } + }); + if (Object.keys(result.authData).length == 0) { + delete result.authData; + } + } } }