サインアップ・ログアウト周りの怪しい挙動を修正 (#7750)

* fix #7749

* fix

* fix logout behavior when there is no push subscription

* fix logout behavior when there is no push subscription 2

* clean up service worker registration

* fix lint

* remove submodules
This commit is contained in:
tamaina 2021-09-04 18:09:53 +09:00 committed by GitHub
parent 790c624b75
commit eb64269927
4 changed files with 32 additions and 18 deletions

View file

@ -1,4 +1,4 @@
import { get, set } from '@client/scripts/idb-proxy';
import { del, get, set } from '@client/scripts/idb-proxy';
import { reactive } from 'vue';
import { apiUrl } from '@client/config';
import { waiting } from '@client/os';
@ -26,21 +26,33 @@ export async function signout() {
//#region Remove account
const accounts = await getAccounts();
accounts.splice(accounts.findIndex(x => x.id === $i.id), 1);
set('accounts', accounts);
if (accounts.length > 0) await set('accounts', accounts);
else await del('accounts');
//#endregion
//#region Remove push notification registration
//#region Remove service worker registration
try {
const registration = await navigator.serviceWorker.ready;
const push = await registration.pushManager.getSubscription();
if (!push) return;
await fetch(`${apiUrl}/sw/unregister`, {
method: 'POST',
body: JSON.stringify({
i: $i.token,
endpoint: push.endpoint,
}),
});
if (navigator.serviceWorker.controller) {
const registration = await navigator.serviceWorker.ready;
const push = await registration.pushManager.getSubscription();
if (push) {
await fetch(`${apiUrl}/sw/unregister`, {
method: 'POST',
body: JSON.stringify({
i: $i.token,
endpoint: push.endpoint,
}),
});
}
}
if (accounts.length === 0) {
await navigator.serviceWorker.getRegistrations()
.then(registrations => {
return Promise.all(registrations.map(registration => registration.unregister()));
});
}
} catch (e) {}
//#endregion

View file

@ -111,7 +111,9 @@ export default defineComponent({
onLogin(res) {
if (this.autoSet) {
login(res.i);
return login(res.i);
} else {
return;
}
},
@ -144,7 +146,7 @@ export default defineComponent({
});
}).then(res => {
this.$emit('login', res);
this.onLogin(res);
return this.onLogin(res);
}).catch(err => {
if (err === null) return;
os.dialog({

View file

@ -178,14 +178,14 @@ export default defineComponent({
'hcaptcha-response': this.hCaptchaResponse,
'g-recaptcha-response': this.reCaptchaResponse,
}).then(() => {
os.api('signin', {
return os.api('signin', {
username: this.username,
password: this.password
}).then(res => {
this.$emit('signup', res);
if (this.autoSet) {
login(res.i);
return login(res.i);
}
});
}).catch(() => {

View file

@ -53,7 +53,7 @@ export default defineComponent({
username: this.username,
password: this.password,
}).then(res => {
login(res.i);
return login(res.token);
}).catch(() => {
this.submitting = false;