diff --git a/html/src/app.js b/html/src/app.js
index cf5ce5a5..1e7580ed 100644
--- a/html/src/app.js
+++ b/html/src/app.js
@@ -374,6 +374,7 @@ speechSynthesis.getVoices();
API.websocketDomainVrchat = 'wss://pipeline.vrchat.cloud';
API.endpointDomain = 'https://api.vrchat.cloud/api/1';
API.websocketDomain = 'wss://pipeline.vrchat.cloud';
+ API.attemptingAutoLogin = false;
API.call = function (endpoint, options) {
var init = {
@@ -483,9 +484,7 @@ speechSynthesis.getVoices();
status === 401 &&
data.error.message === '"Missing Credentials"'
) {
- if (endpoint === 'auth/user') {
- this.$emit('AUTOLOGIN');
- }
+ this.$emit('AUTOLOGIN');
throw new Error('401: Missing Credentials');
}
if (status === 403 && endpoint.substring(0, 6) === 'config') {
@@ -8597,30 +8596,58 @@ speechSynthesis.getVoices();
};
API.$on('AUTOLOGIN', function () {
+ if (this.attemptingAutoLogin) {
+ return;
+ }
+ this.attemptingAutoLogin = true;
var user =
$app.loginForm.savedCredentials[$app.loginForm.lastUserLoggedIn];
- if (typeof user !== 'undefined') {
- if ($app.enablePrimaryPassword) {
- this.logout();
- } else {
- $app.relogin(user).then(() => {
- if (this.errorNoty) {
- this.errorNoty.close();
- }
- if (!navigator.onLine) {
- this.errorNoty = new Noty({
- type: 'error',
- text: 'You are offline.'
- }).show();
- } else {
- this.errorNoty = new Noty({
- type: 'success',
- text: 'Automatically logged in.'
- }).show();
- }
- });
- }
+ if (typeof user === 'undefined') {
+ this.attemptingAutoLogin = false;
+ return;
}
+ if ($app.enablePrimaryPassword) {
+ this.logout();
+ return;
+ }
+ $app.relogin(user)
+ .then(() => {
+ if (this.errorNoty) {
+ this.errorNoty.close();
+ }
+ this.errorNoty = new Noty({
+ type: 'success',
+ text: 'Automatically logged in.'
+ }).show();
+ console.log('Automatically logged in.');
+ })
+ .catch((err) => {
+ if (this.errorNoty) {
+ this.errorNoty.close();
+ }
+ this.errorNoty = new Noty({
+ type: 'error',
+ text: 'Failed to login automatically.'
+ }).show();
+ console.error('Failed to login automatically.', err);
+ })
+ .finally(() => {
+ if (!navigator.onLine) {
+ this.errorNoty = new Noty({
+ type: 'error',
+ text: `You're offline.`
+ }).show();
+ console.error(`You're offline.`);
+ }
+ });
+ });
+
+ API.$on('USER:CURRENT', function () {
+ this.attemptingAutoLogin = false;
+ });
+
+ API.$on('LOGOUT', function () {
+ this.attemptingAutoLogin = false;
});
$app.data.loginForm = {