Skip to content

Commit cd7a4b8

Browse files
committed
Merge pull request #978 from ParsePlatform/flovilmart.cleanupNullAuthDatakeysOnLogin
Fixes #935, cleans up authData null keys on login for android crash
2 parents d42d359 + 1ed868b commit cd7a4b8

File tree

2 files changed

+51
-1
lines changed

2 files changed

+51
-1
lines changed

spec/ParseUser.spec.js

+37
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
var request = require('request');
1111
var passwordCrypto = require('../src/password');
12+
var Config = require('../src/Config');
1213

1314
function verifyACL(user) {
1415
const ACL = user.getACL();
@@ -1780,5 +1781,41 @@ describe('Parse.User testing', () => {
17801781
}
17811782
});
17821783
});
1784+
1785+
// Sometimes the authData still has null on that keys
1786+
// https://github.com/ParsePlatform/parse-server/issues/935
1787+
it('should cleanup null authData keys', (done) => {
1788+
let database = new Config(Parse.applicationId).database;
1789+
database.create('_User', {
1790+
username: 'user',
1791+
password: '$2a$10$8/wZJyEuiEaobBBqzTG.jeY.XSFJd0rzaN//ososvEI4yLqI.4aie',
1792+
_auth_data_facebook: null
1793+
}, {}).then(() => {
1794+
return new Promise((resolve, reject) => {
1795+
request.get({
1796+
url: 'http://localhost:8378/1/login?username=user&password=test',
1797+
headers: {
1798+
'X-Parse-Application-Id': 'test',
1799+
'X-Parse-Master-Key': 'test',
1800+
},
1801+
json: true
1802+
}, (err, res, body) => {
1803+
if (err) {
1804+
reject(err);
1805+
} else {
1806+
resolve(body);
1807+
}
1808+
})
1809+
})
1810+
}).then((user) => {
1811+
let authData = user.authData;
1812+
expect(user.username).toEqual('user');
1813+
expect(authData).toBeUndefined();
1814+
done();
1815+
}).catch((err) => {
1816+
fail('this should not fail');
1817+
done();
1818+
})
1819+
});
17831820
});
17841821

src/Routers/UsersRouter.js

+14-1
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,20 @@ export class UsersRouter extends ClassesRouter {
102102
let token = 'r:' + cryptoUtils.newToken();
103103
user.sessionToken = token;
104104
delete user.password;
105-
105+
106+
// Sometimes the authData still has null on that keys
107+
// https://github.com/ParsePlatform/parse-server/issues/935
108+
if (user.authData) {
109+
Object.keys(user.authData).forEach((provider) => {
110+
if (user.authData[provider] === null) {
111+
delete user.authData[provider];
112+
}
113+
});
114+
if (Object.keys(user.authData).length == 0) {
115+
delete user.authData;
116+
}
117+
}
118+
106119
req.config.filesController.expandFilesInObject(req.config, user);
107120

108121
let expiresAt = new Date();

0 commit comments

Comments
 (0)