@@ -7,11 +7,9 @@ import {
7
7
8
8
import { provideApolloClient } from "@vue/apollo-composable" ;
9
9
10
+ const SEVEN_DAYS = 7 * 24 * 60 * 60 * 1000 ; // 7 days in milliseconds
11
+
10
12
export default defineNuxtPlugin ( ( nuxtApp ) => {
11
- const cookie = useCookie ( "woo-session" , {
12
- maxAge : 1_209_600 , // 14 days
13
- sameSite : "lax" ,
14
- } ) ;
15
13
const config = useRuntimeConfig ( ) ;
16
14
17
15
const httpLink = createHttpLink ( {
@@ -22,13 +20,25 @@ export default defineNuxtPlugin((nuxtApp) => {
22
20
/**
23
21
* If session data exist in local storage, set value as session header.
24
22
*/
23
+ const sessionData = process . client
24
+ ? JSON . parse ( localStorage . getItem ( "woo-session" ) )
25
+ : null ;
25
26
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
+ }
32
42
}
33
43
34
44
return forward ( operation ) ;
@@ -47,11 +57,16 @@ export default defineNuxtPlugin((nuxtApp) => {
47
57
48
58
const session = headers . get ( "woocommerce-session" ) ;
49
59
50
- if ( session ) {
60
+ if ( session && process . client ) {
51
61
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
+ ) ;
55
70
}
56
71
}
57
72
return response ;
@@ -87,6 +102,11 @@ export default defineNuxtPlugin((nuxtApp) => {
87
102
provideApolloClient ( apolloClient ) ;
88
103
89
104
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
+ }
91
111
} ) ;
92
112
} ) ;
0 commit comments