Skip to content

Commit 38637f0

Browse files
committed
services/session: Keep listening for message events until we find one with code and state
This should ensure that `message` events from noisy browser extensions are ignored and don't block our login flow.
1 parent 30ad81e commit 38637f0

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

app/services/session.js

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -79,14 +79,8 @@ export default class SessionService extends Service {
7979
}
8080

8181
win.close();
82-
if (event.origin !== window.location.origin || !event.data) {
83-
return;
84-
}
8582

86-
let { code, state } = event.data;
87-
if (!code || !state) {
88-
return;
89-
}
83+
let { code, state } = event;
9084

9185
let response = await fetch(`/api/private/session/authorize?code=${code}&state=${state}`);
9286
if (!response.ok) {
@@ -112,7 +106,20 @@ export default class SessionService extends Service {
112106
});
113107

114108
windowEventWatcherTask = task(async () => {
115-
return await waitForEvent(window, 'message');
109+
// eslint-disable-next-line no-constant-condition
110+
while (true) {
111+
let event = await waitForEvent(window, 'message');
112+
if (event.origin !== window.location.origin || !event.data) {
113+
continue;
114+
}
115+
116+
let { code, state } = event.data;
117+
if (!code || !state) {
118+
continue;
119+
}
120+
121+
return { code, state };
122+
}
116123
});
117124

118125
windowCloseWatcherTask = task(async window => {

0 commit comments

Comments
 (0)