Skip to content

Commit 0dd438d

Browse files
committed
Update apollo.js
1 parent a529ac7 commit 0dd438d

File tree

1 file changed

+35
-15
lines changed

1 file changed

+35
-15
lines changed

plugins/apollo.js

Lines changed: 35 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,9 @@ import {
77

88
import { provideApolloClient } from "@vue/apollo-composable";
99

10+
const SEVEN_DAYS = 7 * 24 * 60 * 60 * 1000; // 7 days in milliseconds
11+
1012
export default defineNuxtPlugin((nuxtApp) => {
11-
const cookie = useCookie("woo-session", {
12-
maxAge: 1_209_600, // 14 days
13-
sameSite: "lax",
14-
});
1513
const config = useRuntimeConfig();
1614

1715
const httpLink = createHttpLink({
@@ -22,13 +20,25 @@ export default defineNuxtPlugin((nuxtApp) => {
2220
/**
2321
* If session data exist in local storage, set value as session header.
2422
*/
23+
const sessionData = process.client
24+
? JSON.parse(localStorage.getItem("woo-session"))
25+
: null;
2526

26-
if (cookie.value) {
27-
operation.setContext(() => ({
28-
headers: {
29-
"woocommerce-session": `Session ${cookie.value}`,
30-
},
31-
}));
27+
if (sessionData && sessionData.token && sessionData.createdTime) {
28+
const { token, createdTime } = sessionData;
29+
30+
// Check if the token is older than 7 days
31+
if (Date.now() - createdTime > SEVEN_DAYS) {
32+
// If it is, delete it
33+
localStorage.removeItem("woo-session");
34+
} else {
35+
// If it's not, use the token
36+
operation.setContext(() => ({
37+
headers: {
38+
"woocommerce-session": `Session ${token}`,
39+
},
40+
}));
41+
}
3242
}
3343

3444
return forward(operation);
@@ -47,11 +57,16 @@ export default defineNuxtPlugin((nuxtApp) => {
4757

4858
const session = headers.get("woocommerce-session");
4959

50-
if (session) {
60+
if (session && process.client) {
5161
if (session === "false") {
52-
cookie.value = null;
53-
} else if (session !== cookie.value) {
54-
cookie.value = session;
62+
// Remove session data if session destroyed.
63+
localStorage.removeItem("woo-session");
64+
// Update session new data if changed.
65+
} else if (!localStorage.getItem("woo-session")) {
66+
localStorage.setItem(
67+
"woo-session",
68+
JSON.stringify({ token: session, createdTime: Date.now() })
69+
);
5570
}
5671
}
5772
return response;
@@ -87,6 +102,11 @@ export default defineNuxtPlugin((nuxtApp) => {
87102
provideApolloClient(apolloClient);
88103

89104
nuxtApp.hook("apollo:auth", ({ token }) => {
90-
token.value = cookie.value;
105+
if (process.client) {
106+
const sessionData = JSON.parse(localStorage.getItem("woo-session"));
107+
if (sessionData && sessionData.token) {
108+
token.value = sessionData.token;
109+
}
110+
}
91111
});
92112
});

0 commit comments

Comments
 (0)