diff --git a/packages/accounts-base/accounts_server.js b/packages/accounts-base/accounts_server.js index dbffd61e64..88e785758d 100644 --- a/packages/accounts-base/accounts_server.js +++ b/packages/accounts-base/accounts_server.js @@ -176,9 +176,10 @@ Ap._failedLogin = function (connection, attempt) { }); }; -Ap._successfulLogout = function () { +Ap._successfulLogout = function (connection, userId) { + var logoutContext = { userId: userId, connection: connection }; this._onLogoutHook.each(function (callback) { - callback(); + callback(logoutContext); return true; }); }; @@ -537,8 +538,8 @@ Ap._initServerMethods = function () { accounts._setLoginToken(this.userId, this.connection, null); if (token && this.userId) accounts.destroyToken(this.userId, token); + accounts._successfulLogout(this.connection, this.userId); this.setUserId(null); - accounts._successfulLogout(); }; // Delete all the current user's tokens and close all open connections logged diff --git a/packages/accounts-base/accounts_tests.js b/packages/accounts-base/accounts_tests.js index bb8774b7b1..cc56f03a57 100644 --- a/packages/accounts-base/accounts_tests.js +++ b/packages/accounts-base/accounts_tests.js @@ -388,6 +388,9 @@ Tinytest.add( var onLoginStopper = Accounts.onLogin(function(attempt) { test.equal(Meteor.userId(), onLoginExpectedUserId, "onLogin"); }); + var onLogoutStopper = Accounts.onLogout(function(logoutContext) { + test.equal(logoutContext.userId, onLogoutExpectedUserId, "onLogout"); + }); var onLoginFailureStopper = Accounts.onLoginFailure(function(attempt) { test.equal(Meteor.userId(), onLoginFailureExpectedUserId, "onLoginFailure"); }); @@ -408,9 +411,14 @@ Tinytest.add( var onLoginFailureExpectedUserId = userId; test.throws(function() { conn.call('login', { resume: "bogus" }) }, '403'); + // Trigger onLogout callbacks + var onLogoutExpectedUserId = userId; + conn.call('logout'); + conn.disconnect(); validateStopper.stop(); onLoginStopper.stop(); + onLogoutStopper.stop(); onLoginFailureStopper.stop(); } );