diff --git a/src/client/index.js b/src/client/index.js index 870313a4..868597ab 100644 --- a/src/client/index.js +++ b/src/client/index.js @@ -80,9 +80,9 @@ export default function(opts = {}) { app.set('token', null); clearCookie(config.cookie); - + // remove the token from localStorage - return Promise.resolve(app.get('storage').setItem(config.tokenKey, '')).then(() => { + return Promise.resolve(app.get('storage').removeItem(config.tokenKey)).then(() => { // If using sockets de-authenticate the socket if (app.io || app.primus) { const method = app.io ? 'emit' : 'send'; diff --git a/src/client/utils.js b/src/client/utils.js index f1c19a77..1fe7fa87 100644 --- a/src/client/utils.js +++ b/src/client/utils.js @@ -66,7 +66,7 @@ export function getCookie(name) { // Returns the value for a cookie export function clearCookie(name) { if (typeof document !== 'undefined') { - document.cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:01 GMT;`; + document.cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:01 GMT;`; } return null; @@ -99,6 +99,11 @@ export function getStorage(storage) { setItem(key, value) { return (this.store[key] = value); + }, + + removeItem(key) { + delete this.store[key]; + return this; } }; } diff --git a/test/client/index.test.js b/test/client/index.test.js index 6c3ac85a..a10afc8f 100644 --- a/test/client/index.test.js +++ b/test/client/index.test.js @@ -110,26 +110,30 @@ const setupTests = initApp => { }).catch(done); }); - it('.logout works, does not grant access to protected service', done => { + it('.logout works, does not grant access to protected service and token is removed from localstorage', done => { app.authenticate({ - type: 'local', - email, password - }).then(response => { - expect(response.token).to.not.equal(undefined); - expect(response.data).to.not.equal(undefined); + type: 'local', + email, password + }).then(response => { + expect(response.token).to.not.equal(undefined); + expect(response.data).to.not.equal(undefined); - app.logout().then(() => { - expect(app.get('token')).to.equal(null); - expect(app.get('user')).to.equal(null); + return app.logout().then(() => { + expect(app.get('token')).to.equal(null); + expect(app.get('user')).to.equal(null); + + return Promise.resolve(app.get('storage').getItem('feathers-jwt')).then(token => { + expect(token).to.equal(undefined); app.service('messages').create({ text: 'auth test message' }) .then(done) .catch(error => { expect(error.code).to.equal(401); done(); }); - }).catch(done); - }).catch(done); + }); + }); + }).catch(done); }); };