Skip to content

Commit 00fde05

Browse files
committed
Fix token expiration
Solves #1149 and adds a 7 day token expiration to woo-session
1 parent 1fa4cf8 commit 00fde05

File tree

1 file changed

+27
-9
lines changed

1 file changed

+27
-9
lines changed

src/utils/apollo/ApolloClient.js

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,39 @@ import {
77
ApolloLink,
88
} from '@apollo/client';
99

10+
const SEVEN_DAYS = 7 * 24 * 60 * 60 * 1000; // 7 days in milliseconds
11+
1012
/**
1113
* Middleware operation
1214
* If we have a session token in localStorage, add it to the GraphQL request as a Session header.
1315
*/
1416
export const middleware = new ApolloLink((operation, forward) => {
1517
/**
1618
* If session data exist in local storage, set value as session header.
17-
* Here we also delete the session if it is older than 24 hours
19+
* Here we also delete the session if it is older than 7 days
1820
*/
19-
const session = process.browser ? localStorage.getItem('woo-session') : null;
21+
const sessionData = process.browser
22+
? JSON.parse(localStorage.getItem('woo-session'))
23+
: null;
24+
25+
if (sessionData) {
26+
const { token, createdTime } = sessionData;
2027

21-
if (session) {
22-
operation.setContext(() => ({
23-
headers: {
24-
'woocommerce-session': `Session ${session}`,
25-
},
26-
}));
28+
// Check if the token is older than 7 days
29+
if (Date.now() - createdTime > SEVEN_DAYS) {
30+
// If it is, delete it
31+
localStorage.removeItem('woo-session');
32+
localStorage.setItem('woocommerce-cart', JSON.stringify({}));
33+
} else {
34+
// If it's not, use the token
35+
operation.setContext(() => ({
36+
headers: {
37+
'woocommerce-session': `Session ${token}`,
38+
},
39+
}));
40+
}
2741
}
42+
2843
return forward(operation);
2944
});
3045

@@ -51,7 +66,10 @@ export const afterware = new ApolloLink((operation, forward) =>
5166
localStorage.removeItem('woo-session');
5267
// Update session new data if changed.
5368
} else if (!localStorage.getItem('woo-session')) {
54-
localStorage.setItem('woo-session', session);
69+
localStorage.setItem(
70+
'woo-session',
71+
JSON.stringify({ token: session, createdTime: Date.now() }),
72+
);
5573
}
5674
}
5775

0 commit comments

Comments
 (0)