diff --git a/spec/ParseUser.spec.js b/spec/ParseUser.spec.js index 5f7c4fd409..30fc6cc526 100644 --- a/spec/ParseUser.spec.js +++ b/spec/ParseUser.spec.js @@ -78,7 +78,8 @@ describe('Parse.User testing', () => { sessionToken = newUser.getSessionToken(); ok(sessionToken); - Parse.User.logOut(); + return Parse.User.logOut(); + }).then(() => { ok(!Parse.User.current()); return Parse.User.become(sessionToken); @@ -91,7 +92,8 @@ describe('Parse.User testing', () => { equal(newUser.get("username"), "Jason"); equal(newUser.get("code"), "red"); - Parse.User.logOut(); + return Parse.User.logOut(); + }).then(() => { ok(!Parse.User.current()); return Parse.User.become("somegarbage"); @@ -236,22 +238,20 @@ describe('Parse.User testing', () => { user.set("password", "asdf"); user.set("email", "asdf@example.com"); user.set("username", "zxcv"); - user.signUp(null, { - success: function() { - var currentUser = Parse.User.current(); - equal(user.id, currentUser.id); - ok(user.getSessionToken()); - - var currentUserAgain = Parse.User.current(); - // should be the same object - equal(currentUser, currentUserAgain); + user.signUp().then(() => { + var currentUser = Parse.User.current(); + equal(user.id, currentUser.id); + ok(user.getSessionToken()); - // test logging out the current user - Parse.User.logOut(); + var currentUserAgain = Parse.User.current(); + // should be the same object + equal(currentUser, currentUserAgain); - equal(Parse.User.current(), null); - done(); - } + // test logging out the current user + return Parse.User.logOut(); + }).then(() => { + equal(Parse.User.current(), null); + done(); }); }); @@ -578,28 +578,24 @@ describe('Parse.User testing', () => { it("user loaded from localStorage from login", (done) => { + var id; + Parse.User.signUp("alice", "password").then((alice) => { + id = alice.id; + return Parse.User.logOut(); + }).then(() => { + return Parse.User.logIn("alice", "password"); + }).then((user) => { + // Force the current user to read from disk + delete Parse.User._currentUser; + delete Parse.User._currentUserMatchesDisk; - Parse.User.signUp("alice", "password", null, { - success: function(alice) { - var id = alice.id; - Parse.User.logOut(); - - Parse.User.logIn("alice", "password", { - success: function(user) { - // Force the current user to read from disk - delete Parse.User._currentUser; - delete Parse.User._currentUserMatchesDisk; - - var userFromDisk = Parse.User.current(); - equal(userFromDisk.get("password"), undefined, - "password should not be in attributes"); - equal(userFromDisk.id, id, "id should be set"); - ok(userFromDisk.getSessionToken(), - "currentUser should have a sessionToken"); - done(); - } - }); - } + var userFromDisk = Parse.User.current(); + equal(userFromDisk.get("password"), undefined, + "password should not be in attributes"); + equal(userFromDisk.id, id, "id should be set"); + ok(userFromDisk.getSessionToken(), + "currentUser should have a sessionToken"); + done(); }); }); @@ -609,8 +605,8 @@ describe('Parse.User testing', () => { Parse.User.signUp("alice", "password", null).then(function(alice) { id = alice.id; - Parse.User.logOut(); - + return Parse.User.logOut(); + }).then(() => { return Parse.User.logIn("alice", "password"); }).then(function() { // Simulate browser refresh by force-reloading user from localStorage @@ -1300,8 +1296,8 @@ describe('Parse.User testing', () => { return Parse.User.signUp("finn", "human", { foo: "bar" }); }).then(function() { - Parse.User.logOut(); - + return Parse.User.logOut(); + }).then(() => { var user = new Parse.User(); user.set("username", "jake"); user.set("password", "dog"); @@ -1309,8 +1305,8 @@ describe('Parse.User testing', () => { return user.signUp(); }).then(function() { - Parse.User.logOut(); - + return Parse.User.logOut(); + }).then(() => { var query = new Parse.Query(Parse.User); return query.find(); diff --git a/spec/helper.js b/spec/helper.js index ef80e0777b..cca4d1a570 100644 --- a/spec/helper.js +++ b/spec/helper.js @@ -46,8 +46,7 @@ beforeEach(function(done) { }); afterEach(function(done) { - Parse.User.logOut(); - Parse.Promise.as().then(() => { + Parse.User.logOut().then(() => { return clearData(); }).then(() => { done(); diff --git a/users.js b/users.js index 007808543e..c1bfb19b11 100644 --- a/users.js +++ b/users.js @@ -161,6 +161,22 @@ function handleDelete(req) { }); } +function handleLogOut(req) { + var success = {response: {}}; + if (req.info && req.info.sessionToken) { + rest.find(req.config, Auth.master(req.config), '_Session', + {_session_token: req.info.sessionToken} + ).then((records) => { + if (records.results && records.results.length) { + rest.del(req.config, Auth.master(req.config), '_Session', + records.results[0].id + ); + } + }); + } + return Promise.resolve(success); +} + function handleUpdate(req) { return rest.update(req.config, req.auth, '_User', req.params.objectId, req.body) @@ -176,6 +192,7 @@ function notImplementedYet(req) { router.route('POST', '/users', handleCreate); router.route('GET', '/login', handleLogIn); +router.route('POST', '/logout', handleLogOut); router.route('GET', '/users/me', handleMe); router.route('GET', '/users/:objectId', handleGet); router.route('PUT', '/users/:objectId', handleUpdate);