From 5af38db74bc54048c4221e3a2c4c736d11754a30 Mon Sep 17 00:00:00 2001 From: dakkar Date: Sat, 12 Oct 2024 18:16:06 +0100 Subject: [PATCH 1/2] ignore stale `users/show` responses - fixes #741 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * person starts typing "abcd" * request for user "abcd" is sent to server * person continues typing "ef" * request for user "abcdef" is sent to server * response for user "abcdef" arrives, icon for user "abcdef" is shown * response for user "abcd" arrives, icon for user "abcd" was shown – with this commit, this response is ignored instead This is not just "showing the wrong avatar", btw: `MkSignin` uses the `user` variable to decide whether to use 2FA, so having the wrong data in user can make a login attempt fail. --- packages/frontend/src/components/MkSignin.vue | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/frontend/src/components/MkSignin.vue b/packages/frontend/src/components/MkSignin.vue index 9813774da3..76a6537ccc 100644 --- a/packages/frontend/src/components/MkSignin.vue +++ b/packages/frontend/src/components/MkSignin.vue @@ -110,7 +110,9 @@ function onUsernameChange(): void { misskeyApi('users/show', { username: username.value, }).then(userResponse => { - user.value = userResponse; + if (userResponse.username === username.value) { + user.value = userResponse; + } }, () => { user.value = null; }); From bf6ca8efdc146f817d473df4ebaf43bdfa8bd005 Mon Sep 17 00:00:00 2001 From: dakkar Date: Sat, 12 Oct 2024 18:23:20 +0100 Subject: [PATCH 2/2] also ignore stale *failed* responses - #741 since `misskeyApi` doesn't pass us the request, we close over a copy of the username we requested, to make sure it still matches the current username value --- packages/frontend/src/components/MkSignin.vue | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/frontend/src/components/MkSignin.vue b/packages/frontend/src/components/MkSignin.vue index 76a6537ccc..2ac5c41964 100644 --- a/packages/frontend/src/components/MkSignin.vue +++ b/packages/frontend/src/components/MkSignin.vue @@ -107,14 +107,17 @@ const props = withDefaults(defineProps<{ }); function onUsernameChange(): void { + const usernameRequested = username.value; misskeyApi('users/show', { - username: username.value, + username: usernameRequested, }).then(userResponse => { if (userResponse.username === username.value) { user.value = userResponse; } }, () => { - user.value = null; + if (usernameRequested === username.value) { + user.value = null; + } }); }