diff --git a/spec/ParseUser.spec.js b/spec/ParseUser.spec.js index a91ac5f8fe..9b56645b8e 100644 --- a/spec/ParseUser.spec.js +++ b/spec/ParseUser.spec.js @@ -101,6 +101,36 @@ describe('Parse.User testing', () => { }); }); + it('user login with include', (done) => { + const object = new TestObject(); + object.set('foo', 'bar'); + const user = new Parse.User(); + user.setUsername('asdf'); + user.setPassword('zxcv'); + user.set('foobaz', object); + user.set('foobar', object); + user.signUp().then(() => { + return rp.post({ + url: 'http://localhost:8378/1/login', + headers: { + 'X-Parse-Application-Id': Parse.applicationId, + 'X-Parse-REST-API-Key': 'rest', + }, + json: { + _method: 'GET', + username: 'asdf', + password: 'zxcv', + include: 'foobaz,foobar', + } + }).then((user) => { + equal(user.username, 'asdf'); + equal(user.foobaz.foo, 'bar'); + equal(user.foobar.foo, 'bar'); + done(); + }); + }); + }); + it('user login with non-string username with REST API', (done) => { Parse.User.signUp('asdf', 'zxcv', null, { success: () => { diff --git a/src/Routers/UsersRouter.js b/src/Routers/UsersRouter.js index 2e8af00477..b66627d8be 100644 --- a/src/Routers/UsersRouter.js +++ b/src/Routers/UsersRouter.js @@ -7,6 +7,7 @@ import ClassesRouter from './ClassesRouter'; import rest from '../rest'; import Auth from '../Auth'; import passwordCrypto from '../password'; +import RestQuery from '../RestQuery'; export class UsersRouter extends ClassesRouter { @@ -201,8 +202,26 @@ export class UsersRouter extends ClassesRouter { req.config.filesController.expandFilesInObject(req.config, user); return createSession(); - }) - .then(() => { + }).then(() => { + if (!req.body.include || typeof req.body.include !== 'string') { + return Promise.resolve(); + } + const fields = ['user']; + const includes = req.body.include.split(','); + for (const field of includes) { + fields.push(`user.${field}`); + } + const query = new RestQuery(req.config, Auth.master(req.config), '_Session', + { sessionToken: user.sessionToken }, + { include: fields.join() }, req.info.clientSDK); + return query.execute().then((resp) => { + const includedUser = resp.results[0].user; + includedUser.sessionToken = user.sessionToken; + UsersRouter.removeHiddenProperties(includedUser); + user = includedUser; + return user; + }); + }).then(() => { return { response: user }; }); }