diff --git a/integration/test/ParseUserTest.js b/integration/test/ParseUserTest.js index 73999d2e1..e9d338bb9 100644 --- a/integration/test/ParseUserTest.js +++ b/integration/test/ParseUserTest.js @@ -109,6 +109,16 @@ describe('Parse User', () => { }); }); + it('can log in a user using POST method', (done) => { + Parse.User.signUp('asdf', 'zxcv').then(() => { + return Parse.User.logIn('asdf', 'zxcv', { usePost: true }); + }).then((user) => { + assert.equal(user.get('username'), 'asdf'); + expect(user.existed()).toBe(true); + done(); + }); + }); + it('can login users with installationId', async () => { Parse.User.enableUnsafeCurrentUser(); const currentInstallation = await Parse.CoreManager.getInstallationController().currentInstallationId(); diff --git a/src/ParseUser.js b/src/ParseUser.js index 40f04b077..564bda67d 100644 --- a/src/ParseUser.js +++ b/src/ParseUser.js @@ -449,6 +449,9 @@ class ParseUser extends ParseObject { if (options.hasOwnProperty('installationId')) { loginOptions.installationId = options.installationId; } + if (options.hasOwnProperty('usePost')) { + loginOptions.usePost = options.usePost; + } const controller = CoreManager.getUserController(); return controller.logIn(this, loginOptions); @@ -1104,7 +1107,7 @@ const DefaultController = { password: user.get('password') }; return RESTController.request( - 'GET', 'login', auth, options + options.usePost ? 'POST' : 'GET', 'login', auth, options ).then((response) => { user._migrateId(response.objectId); user._setExisted(true); diff --git a/src/RESTController.js b/src/RESTController.js index 123f64b21..0127d86d7 100644 --- a/src/RESTController.js +++ b/src/RESTController.js @@ -24,6 +24,7 @@ export type RequestOptions = { include?: any; progress?: any; context?: any; + usePost?: boolean; }; export type FullOptions = { @@ -33,6 +34,7 @@ export type FullOptions = { sessionToken?: string; installationId?: string; progress?: any; + usePost?: boolean; }; let XHR = null; diff --git a/src/__tests__/ParseUser-test.js b/src/__tests__/ParseUser-test.js index e92266a14..b8b93e673 100644 --- a/src/__tests__/ParseUser-test.js +++ b/src/__tests__/ParseUser-test.js @@ -229,6 +229,39 @@ describe('ParseUser', () => { }); }); + it('can log in as a user with POST method', (done) => { + ParseUser.enableUnsafeCurrentUser(); + ParseUser._clearCache(); + CoreManager.setRESTController({ + request(method, path, body) { + expect(method).toBe('POST'); + expect(path).toBe('login'); + expect(body.username).toBe('username'); + expect(body.password).toBe('password'); + + return Promise.resolve({ + objectId: 'uid2', + username: 'username', + sessionToken: '123abc' + }, 200); + }, + ajax() {} + }); + ParseUser.logIn('username', 'password', { usePost: true }).then((u) => { + expect(u.id).toBe('uid2'); + expect(u.getSessionToken()).toBe('123abc'); + expect(u.isCurrent()).toBe(true); + expect(u.authenticated()).toBe(true); + expect(ParseUser.current()).toBe(u); + ParseUser._clearCache(); + const current = ParseUser.current(); + expect(current instanceof ParseUser).toBe(true); + expect(current.id).toBe('uid2'); + expect(current.authenticated()).toBe(true); + done(); + }); + }); + it('fail login when invalid username or password is used', (done) => { ParseUser.enableUnsafeCurrentUser(); ParseUser._clearCache();