generated from theodorusclarence/ts-nextjs-tailwind-starter
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix: the cookie error occuring for a long time fixed
- Loading branch information
1 parent
9e7a759
commit 7791290
Showing
6 changed files
with
112 additions
and
28 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -43,3 +43,4 @@ export default function RootLayout({ | |
} | ||
|
||
//TODO: | ||
// when no notif in db, it gives an error. fix that |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
import { type CookieOptions, createServerClient } from '@supabase/ssr'; | ||
import { type NextRequest, NextResponse } from 'next/server'; | ||
|
||
import { SUPABASE_ANON_KEY, SUPABASE_URL } from '@/constant/env'; | ||
|
||
export const createClient = (request: NextRequest) => { | ||
// Create an unmodified response | ||
let response = NextResponse.next({ | ||
request: { | ||
headers: request.headers, | ||
}, | ||
}); | ||
|
||
const supabase = createServerClient( | ||
SUPABASE_URL as string, | ||
SUPABASE_ANON_KEY, | ||
{ | ||
cookies: { | ||
get(name: string) { | ||
return request.cookies.get(name)?.value; | ||
}, | ||
set(name: string, value: string, options: CookieOptions) { | ||
// If the cookie is updated, update the cookies for the request and response | ||
request.cookies.set({ | ||
name, | ||
value, | ||
...options, | ||
}); | ||
response = NextResponse.next({ | ||
request: { | ||
headers: request.headers, | ||
}, | ||
}); | ||
response.cookies.set({ | ||
name, | ||
value, | ||
...options, | ||
}); | ||
}, | ||
remove(name: string, options: CookieOptions) { | ||
// If the cookie is removed, update the cookies for the request and response | ||
request.cookies.set({ | ||
name, | ||
value: '', | ||
...options, | ||
}); | ||
response = NextResponse.next({ | ||
request: { | ||
headers: request.headers, | ||
}, | ||
}); | ||
response.cookies.set({ | ||
name, | ||
value: '', | ||
...options, | ||
}); | ||
}, | ||
}, | ||
} | ||
); | ||
|
||
return { supabase, response }; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,51 +1,60 @@ | ||
import { type CookieOptions, createServerClient } from '@supabase/ssr'; | ||
import { deleteCookie, getCookie, setCookie } from 'cookies-next'; | ||
import { getCookie, setCookie } from 'cookies-next'; | ||
import { cookies } from 'next/headers'; | ||
import { type NextRequest, type NextResponse } from 'next/server'; | ||
|
||
import { SUPABASE_ANON_KEY, SUPABASE_URL } from '@/constant/env'; | ||
|
||
// server component can only get cookies and not set them, hence the "component" check | ||
export function createSupabaseServerClient(component = false) { | ||
export function createSupabaseReqResClient( | ||
req: NextRequest, | ||
res: NextResponse | ||
) { | ||
cookies().getAll(); // Keep cookies in the JS execution context for Next.js build | ||
return createServerClient(SUPABASE_URL as string, SUPABASE_ANON_KEY, { | ||
cookies: { | ||
get(name: string) { | ||
return getCookie(name, { cookies }); | ||
return getCookie(name, { req, res }); | ||
}, | ||
set(name: string, value: string, options: CookieOptions) { | ||
if (component) return; | ||
setCookie(name, value, { cookies, ...options }); | ||
setCookie(name, value, { req, res, ...options }); | ||
}, | ||
remove(name: string, options: CookieOptions) { | ||
if (component) return; | ||
deleteCookie(name, { cookies, ...options }); | ||
setCookie(name, '', { req, res, ...options }); | ||
}, | ||
}, | ||
}); | ||
} | ||
|
||
export function createSupabaseServerComponentClient() { | ||
cookies().getAll(); // Keep cookies in the JS execution context for Next.js build | ||
return createSupabaseServerClient(true); | ||
} | ||
|
||
export function createSupabaseReqResClient( | ||
req: NextRequest, | ||
res: NextResponse | ||
) { | ||
cookies().getAll(); // Keep cookies in the JS execution context for Next.js build | ||
export const createClient = (cookieStore: ReturnType<typeof cookies>) => { | ||
return createServerClient(SUPABASE_URL as string, SUPABASE_ANON_KEY, { | ||
cookies: { | ||
get(name: string) { | ||
return getCookie(name, { req, res }); | ||
return cookieStore.get(name)?.value; | ||
}, | ||
set(name: string, value: string, options: CookieOptions) { | ||
setCookie(name, value, { req, res, ...options }); | ||
try { | ||
cookieStore.set({ name, value, ...options }); | ||
} catch (error) { | ||
// The `set` method was called from a Server Component. | ||
// This can be ignored if you have middleware refreshing | ||
// user sessions. | ||
} | ||
}, | ||
remove(name: string, options: CookieOptions) { | ||
setCookie(name, '', { req, res, ...options }); | ||
try { | ||
cookieStore.set({ name, value: '', ...options }); | ||
} catch (error) { | ||
// The `delete` method was called from a Server Component. | ||
// This can be ignored if you have middleware refreshing | ||
// user sessions. | ||
} | ||
}, | ||
}, | ||
}); | ||
} | ||
}; | ||
|
||
export const createSupabaseServerClient = () => { | ||
const cookieStore = cookies(); | ||
const supabase = createClient(cookieStore); | ||
return supabase; | ||
}; |