diff --git a/server/renderer.js b/server/renderer.js index 415141ee..2cbe3712 100644 --- a/server/renderer.js +++ b/server/renderer.js @@ -1,6 +1,7 @@ const path = require('path'); const fs = require('fs'); const _ = require('lodash'); +const { types } = require('sharetribe-sdk'); const { renderApp } = require('./importer'); const buildPath = path.resolve(__dirname, '..', 'build'); @@ -43,9 +44,14 @@ exports.render = function(requestUrl, context, preloadedState) { // For security reasons we ensure that preloaded state is considered as a string // by replacing '<' character with its unicode equivalent. // http://redux.js.org/docs/recipes/ServerRendering.html#security-considerations - const serializedState = JSON.stringify(preloadedState).replace(/window.__PRELOADED_STATE__ = ${serializedState}; + `; return template({ title: head.title.toString(), preloadedStateScript, body }); diff --git a/src/index.js b/src/index.js index fa803020..5cf465fb 100644 --- a/src/index.js +++ b/src/index.js @@ -53,9 +53,10 @@ const renderWhenAuthInfoLoaded = store => { // If we're in a browser already, render the client application. if (typeof window !== 'undefined') { // eslint-disable-next-line no-underscore-dangle - const preloadedState = window.__PRELOADED_STATE__ || {}; + const preloadedState = window.__PRELOADED_STATE__ || '{}'; + const initialState = JSON.parse(preloadedState, types.reviver); const sdk = createInstance({ clientId: config.sdk.clientId, baseUrl: config.sdk.baseUrl }); - const store = configureStore(sdk, preloadedState); + const store = configureStore(sdk, initialState); store.runSaga(createRootSaga(sdk));