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
pull/21833/head
David Baker 2019-08-02 11:22:42 +01:00
parent b1cc089062
commit 1c156f0a5a
2 changed files with 11 additions and 3 deletions

View File

@ -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,

View File

@ -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();