diff --git a/frontend_tests/node_tests/transmit.js b/frontend_tests/node_tests/transmit.js index 9e18d744a4..b06fb78f87 100644 --- a/frontend_tests/node_tests/transmit.js +++ b/frontend_tests/node_tests/transmit.js @@ -1,5 +1,6 @@ var noop = function () {}; +set_global('$', global.make_zjquery()); set_global('page_params', { use_websockets: true, }); diff --git a/static/js/transmit.js b/static/js/transmit.js index ee201e895d..1ac6c75dff 100644 --- a/static/js/transmit.js +++ b/static/js/transmit.js @@ -3,11 +3,15 @@ var transmit = (function () { var exports = {}; var socket; -if (page_params.use_websockets) { - socket = new Socket("/sockjs"); -} -// For debugging. The socket will eventually move out of this file anyway. -exports._socket = socket; +$(function () { + // We initialize the socket inside a function so that this code + // runs after `csrf_token` is initialized in setup.js. + if (page_params.use_websockets) { + socket = new Socket("/sockjs"); + } + // For debugging. The socket will eventually move out of this file anyway. + exports._socket = socket; +}); function send_message_socket(request, success, error) { request.socket_user_agent = navigator.userAgent; diff --git a/zerver/tornado/socket.py b/zerver/tornado/socket.py index 7e01585849..8a29aa9f95 100644 --- a/zerver/tornado/socket.py +++ b/zerver/tornado/socket.py @@ -121,7 +121,7 @@ class SocketConnection(sockjs.tornado.SockJSConnection): if 'csrf_token' not in msg['request']: # Debugging code to help with understanding #6961 - logging.error("Invalid websockets auth request: %s" % (msg['request'],)) + logging.error("CSRF token missing from websockets auth request: %s" % (msg['request'],)) raise JsonableError(_('CSRF token entry missing from request')) if not _compare_salted_tokens(msg['request']['csrf_token'], self.csrf_token): raise JsonableError(_('CSRF token does not match that in cookie'))