diff --git a/src/components/Share.jsx b/src/components/Share.jsx index b34ac14..6b200e1 100644 --- a/src/components/Share.jsx +++ b/src/components/Share.jsx @@ -36,7 +36,7 @@ export function Share({ const newVal = e.target.checked; setVal(newVal); if (newVal) { - const token = await window.user.getIdToken(); + const token = await window.user.firebaseUser.getIdToken(); let res; try { res = await fetch( diff --git a/src/components/app.jsx b/src/components/app.jsx index b05dce9..37f81db 100644 --- a/src/components/app.jsx +++ b/src/components/app.jsx @@ -23,7 +23,8 @@ import { getCompleteHtml, getFilenameFromUrl, prettify, - sanitizeSplitSizes + sanitizeSplitSizes, + persistAuthUserLocally } from '../utils'; import { linearizeFiles, @@ -183,9 +184,24 @@ export default class App extends Component { if (authUser) { log('You are -> ', authUser); alertsService.add('You are now logged in!'); - this.setState({ user: authUser }); - window.user = authUser; - window.localStorage.setItem('user', authUser); + + let newUser = { + uid: authUser.uid, + photoURL: authUser.photoURL + }; + // port some keys from localstorage user to new auth user + const keysToPort = ['isPro', 'displayName', 'settings']; + keysToPort.forEach(key => { + if (user && user[key] !== undefined) { + newUser[key] = user[key]; + } + }); + // storing actual firebase user object for accessing functions like updateProfile + newUser.firebaseUser = authUser; + + this.setState({ user: newUser }); + window.user = newUser; + // window.localStorage.setItem('user', authUser); trackEvent('fn', 'loggedIn', window.IS_EXTENSION ? 'extension' : 'web'); if (!window.localStorage[LocalStorageKeys.ASKED_TO_IMPORT_CREATIONS]) { @@ -201,17 +217,23 @@ export default class App extends Component { trackEvent('ui', 'askToImportModalSeen'); }); } - // storing actual firebase user object for accessing functions like updateProfile - // window.user.firebaseUser = authUser window.db.getUser(authUser.uid).then(customUser => { if (customUser) { const prefs = { ...this.state.prefs }; - Object.assign(prefs, authUser.settings); - const newUser = { ...authUser, isPro: false, ...customUser }; - window.localStorage.setItem('user', newUser); + Object.assign(prefs, customUser.settings); + + // spreading authUser doesn't work below anymore because the required properties are + // not enumerable anymore + newUser = { + ...newUser, + isPro: false, + ...customUser + }; + window.user = newUser; this.setState({ user: newUser, prefs }, this.updateSetting); } + persistAuthUserLocally(newUser); }); } else { // User is signed out. diff --git a/src/db.js b/src/db.js index c9b8381..44b56b5 100644 --- a/src/db.js +++ b/src/db.js @@ -157,7 +157,7 @@ function getArrayFromQuerySnapshot(querySnapshot) { return {}; } const user = doc.data(); - window.user = { ...window.user, ...user }; + return user; }); } diff --git a/src/utils.js b/src/utils.js index 8adf1fa..0d85f17 100644 --- a/src/utils.js +++ b/src/utils.js @@ -417,7 +417,7 @@ export function getCompleteHtml(html, css, js, item, isForExport) { ? chrome.extension.getURL('lib/screenlog.js') : `${location.origin}${ window.DEBUG ? '' : BASE_PATH - }/lib/screenlog.js`) + + }/lib/screenlog.js`) + '">'; } @@ -661,3 +661,14 @@ export function showConfetti(time = 4) { } })(); } + +/** + * Persists the firebase user with a subset of it's keys. + * @param {object} user User object from firebase + */ +export function persistAuthUserLocally(user) { + const keys = ['uid', 'displayName', 'photoURL', 'isPro', 'settings']; + const obj = {}; + keys.map(key => (obj[key] = user[key])); + window.localStorage.setItem('user', JSON.stringify(obj)); +}