Don't create a guest login if user went to /login
This fixes an unintuitive behaviour where, if you follow a link to riot.im/app/#/login, we take you to the login page, but not before we've registered a guest account (or restarted the MatrixClient with the stored creds). This actually ends up simplifying some of the startup dance, as we special-case the registration flows earlier on.
This commit is contained in:
parent
9e70884415
commit
498ea53995
2 changed files with 16 additions and 19 deletions
|
@ -35,9 +35,6 @@ import { _t } from './languageHandler';
|
||||||
* Called at startup, to attempt to build a logged-in Matrix session. It tries
|
* Called at startup, to attempt to build a logged-in Matrix session. It tries
|
||||||
* a number of things:
|
* a number of things:
|
||||||
*
|
*
|
||||||
* 0. if it looks like we are in the middle of a registration process, it does
|
|
||||||
* nothing.
|
|
||||||
*
|
|
||||||
* 1. if we have a loginToken in the (real) query params, it uses that to log
|
* 1. if we have a loginToken in the (real) query params, it uses that to log
|
||||||
* in.
|
* in.
|
||||||
*
|
*
|
||||||
|
@ -80,14 +77,6 @@ export function loadSession(opts) {
|
||||||
const guestIsUrl = opts.guestIsUrl;
|
const guestIsUrl = opts.guestIsUrl;
|
||||||
const defaultDeviceDisplayName = opts.defaultDeviceDisplayName;
|
const defaultDeviceDisplayName = opts.defaultDeviceDisplayName;
|
||||||
|
|
||||||
if (fragmentQueryParams.client_secret && fragmentQueryParams.sid) {
|
|
||||||
// this happens during email validation: the email contains a link to the
|
|
||||||
// IS, which in turn redirects back to vector. We let MatrixChat create a
|
|
||||||
// Registration component which completes the next stage of registration.
|
|
||||||
console.log("Not registering as guest: registration already in progress.");
|
|
||||||
return q();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!guestHsUrl) {
|
if (!guestHsUrl) {
|
||||||
console.warn("Cannot enable guest access: can't determine HS URL to use");
|
console.warn("Cannot enable guest access: can't determine HS URL to use");
|
||||||
enableGuest = false;
|
enableGuest = false;
|
||||||
|
|
|
@ -269,6 +269,21 @@ module.exports = React.createClass({
|
||||||
Lifecycle.initRtsClient(this.props.config.teamServerConfig.teamServerURL);
|
Lifecycle.initRtsClient(this.props.config.teamServerConfig.teamServerURL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if the user has followed a login or register link, don't reanimate
|
||||||
|
// the old creds, but rather go straight to the relevant page
|
||||||
|
|
||||||
|
const firstScreen = this.state.screenAfterLogin ?
|
||||||
|
this.state.screenAfterLogin.screen : null;
|
||||||
|
|
||||||
|
if (firstScreen === 'login' ||
|
||||||
|
firstScreen === 'register' ||
|
||||||
|
firstScreen === 'forgot_password') {
|
||||||
|
this.props.onLoadCompleted();
|
||||||
|
this.setState({loading: false});
|
||||||
|
this._showScreenAfterLogin();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// the extra q() ensures that synchronous exceptions hit the same codepath as
|
// the extra q() ensures that synchronous exceptions hit the same codepath as
|
||||||
// asynchronous ones.
|
// asynchronous ones.
|
||||||
q().then(() => {
|
q().then(() => {
|
||||||
|
@ -840,14 +855,6 @@ module.exports = React.createClass({
|
||||||
_onLoadCompleted: function() {
|
_onLoadCompleted: function() {
|
||||||
this.props.onLoadCompleted();
|
this.props.onLoadCompleted();
|
||||||
this.setState({loading: false});
|
this.setState({loading: false});
|
||||||
|
|
||||||
// Show screens (like 'register') that need to be shown without _onLoggedIn
|
|
||||||
// being called. 'register' needs to be routed here when the email confirmation
|
|
||||||
// link is clicked on.
|
|
||||||
if (this.state.screenAfterLogin &&
|
|
||||||
['register'].indexOf(this.state.screenAfterLogin.screen) !== -1) {
|
|
||||||
this._showScreenAfterLogin();
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -946,6 +953,7 @@ module.exports = React.createClass({
|
||||||
this.state.screenAfterLogin.screen,
|
this.state.screenAfterLogin.screen,
|
||||||
this.state.screenAfterLogin.params,
|
this.state.screenAfterLogin.params,
|
||||||
);
|
);
|
||||||
|
// XXX: is this necessary? `showScreen` should do it for us.
|
||||||
this.notifyNewScreen(this.state.screenAfterLogin.screen);
|
this.notifyNewScreen(this.state.screenAfterLogin.screen);
|
||||||
this.setState({screenAfterLogin: null});
|
this.setState({screenAfterLogin: null});
|
||||||
} else if (localStorage && localStorage.getItem('mx_last_room_id')) {
|
} else if (localStorage && localStorage.getItem('mx_last_room_id')) {
|
||||||
|
|
Loading…
Reference in a new issue