Skip to content

Commit 2ad2f97

Browse files
cardosoMartinSchoeler
authored andcommitted
fix: stale data after login expired (#36338)
1 parent 849ec3c commit 2ad2f97

File tree

3 files changed

+53
-1
lines changed

3 files changed

+53
-1
lines changed

.changeset/spotty-days-complain.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@rocket.chat/meteor": patch
3+
---
4+
5+
Clears stale data in local storage when login is expired

apps/meteor/client/lib/userData.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,4 +146,8 @@ export const synchronizeUserData = async (uid: IUser['_id']): Promise<RawUserDat
146146
return userData;
147147
};
148148

149-
export const removeLocalUserData = (): number => Users.remove({});
149+
export const removeLocalUserData = (): number => {
150+
const removed = Users.remove({});
151+
localStorage.clear();
152+
return removed;
153+
};
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import { Users, restoreState } from './fixtures/userStates';
2+
import { test, expect } from './utils/test';
3+
4+
test.use({ storageState: Users.userE2EE.state });
5+
6+
test.describe('Account Login', () => {
7+
test.beforeAll(async ({ api }) => {
8+
await api.post('/settings/E2E_Enable', { value: true });
9+
await api.post('/settings/E2E_Allow_Unencrypted_Messages', { value: true });
10+
});
11+
12+
test.afterAll(async ({ api }) => {
13+
await api.post('/settings/E2E_Enable', { value: false });
14+
await api.post('/settings/E2E_Allow_Unencrypted_Messages', { value: false });
15+
});
16+
17+
test.beforeEach(async ({ page }) => {
18+
await page.goto('/home');
19+
await restoreState(page, Users.userE2EE);
20+
});
21+
22+
test('should remove private_key and public_key from localStorage when token expires', async ({ page }) => {
23+
expect(await page.evaluate(() => localStorage.getItem('Meteor.userId'))).not.toBeNull();
24+
expect(await page.evaluate(() => localStorage.getItem('Meteor.loginToken'))).not.toBeNull();
25+
expect(await page.evaluate(() => localStorage.getItem('Meteor.loginTokenExpires'))).not.toBeNull();
26+
expect(await page.evaluate(() => localStorage.getItem('private_key'))).not.toBeNull();
27+
expect(await page.evaluate(() => localStorage.getItem('public_key'))).not.toBeNull();
28+
29+
await page.evaluate(() => {
30+
localStorage.setItem('Meteor.loginTokenExpires', new Date().toString());
31+
});
32+
33+
await page.reload();
34+
35+
await expect(page.getByRole('form', { name: 'Login' })).toBeVisible();
36+
37+
expect(await page.evaluate(() => localStorage.getItem('Meteor.userId'))).toBeNull();
38+
expect(await page.evaluate(() => localStorage.getItem('Meteor.loginToken'))).toBeNull();
39+
expect(await page.evaluate(() => localStorage.getItem('Meteor.loginTokenExpires'))).toBeNull();
40+
expect(await page.evaluate(() => localStorage.getItem('private_key'))).toBeNull();
41+
expect(await page.evaluate(() => localStorage.getItem('public_key'))).toBeNull();
42+
});
43+
});

0 commit comments

Comments
 (0)