From 1c156f0a5ab8d2224f3636b8740178a5991d1339 Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 2 Aug 2019 11:22:42 +0100 Subject: [PATCH] Don't load guest sessions on post-registration login link If guest access was enabled, clicking the login link on the 'registration completed' page would just load the guest account you had before registering. Fixes https://github.com/vector-im/riot-web/issues/10482 --- src/Lifecycle.js | 12 ++++++++++-- src/components/structures/auth/Registration.js | 2 +- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/Lifecycle.js b/src/Lifecycle.js index 4919db5c99..cea3f19423 100644 --- a/src/Lifecycle.js +++ b/src/Lifecycle.js @@ -66,6 +66,9 @@ import TypingStore from "./stores/TypingStore"; * @params {string} opts.guestIsUrl: homeserver URL. Only used if enableGuest is * true; defines the IS to use. * + * @params {bool} opts.ignoreGuest: If the stored session is a guest account, ignore + * it and don't load it. + * * @returns {Promise} a promise which resolves when the above process completes. * Resolves to `true` if we ended up starting a session, or `false` if we * failed. @@ -96,7 +99,7 @@ export async function loadSession(opts) { guest: true, }, true).then(() => true); } - const success = await _restoreFromLocalStorage(); + const success = await _restoreFromLocalStorage(Boolean(opts.ignoreGuest)); if (success) { return true; } @@ -272,7 +275,7 @@ export function getLocalStorageSessionVars() { // The plan is to gradually move the localStorage access done here into // SessionStore to avoid bugs where the view becomes out-of-sync with // localStorage (e.g. isGuest etc.) -async function _restoreFromLocalStorage() { +async function _restoreFromLocalStorage(ignoreGuest) { if (!localStorage) { return false; } @@ -280,6 +283,11 @@ async function _restoreFromLocalStorage() { const {hsUrl, isUrl, accessToken, userId, deviceId, isGuest} = getLocalStorageSessionVars(); if (accessToken && userId && hsUrl) { + if (ignoreGuest && isGuest) { + console.log("Ignoring stored guest account: " + userId); + return false; + } + console.log(`Restoring session for ${userId}`); await _doSetLoggedIn({ userId: userId, diff --git a/src/components/structures/auth/Registration.js b/src/components/structures/auth/Registration.js index e825dd7034..fa390ace15 100644 --- a/src/components/structures/auth/Registration.js +++ b/src/components/structures/auth/Registration.js @@ -438,7 +438,7 @@ module.exports = React.createClass({ _onLoginClickWithCheck: async function(ev) { ev.preventDefault(); - const sessionLoaded = await Lifecycle.loadSession({}); + const sessionLoaded = await Lifecycle.loadSession({ignoreGuest: true}); if (!sessionLoaded) { // ok fine, there's still no session: really go to the login page this.props.onLoginClick();