mirror of
https://github.com/aaronpo97/the-biergarten-app.git
synced 2026-02-16 20:13:49 +00:00
38 lines
1.0 KiB
TypeScript
38 lines
1.0 KiB
TypeScript
import { NextApiResponse } from 'next';
|
|
import { serialize, parse } from 'cookie';
|
|
import { SessionRequest } from './types';
|
|
|
|
const TOKEN_NAME = 'token';
|
|
export const MAX_AGE = 60 * 60 * 8; // 8 hours
|
|
|
|
export function setTokenCookie(res: NextApiResponse, token: string) {
|
|
const cookie = serialize(TOKEN_NAME, token, {
|
|
maxAge: MAX_AGE,
|
|
httpOnly: true,
|
|
secure: process.env.NODE_ENV === 'production',
|
|
path: '/',
|
|
sameSite: 'lax',
|
|
});
|
|
|
|
res.setHeader('Set-Cookie', cookie);
|
|
}
|
|
|
|
export function removeTokenCookie(res: NextApiResponse) {
|
|
const cookie = serialize(TOKEN_NAME, '', { maxAge: -1, path: '/' });
|
|
res.setHeader('Set-Cookie', cookie);
|
|
}
|
|
|
|
export function parseCookies(req: SessionRequest) {
|
|
// For API Routes we don't need to parse the cookies.
|
|
if (req.cookies) return req.cookies;
|
|
|
|
// For pages we do need to parse the cookies.
|
|
const cookie = req.headers?.cookie;
|
|
return parse(cookie || '');
|
|
}
|
|
|
|
export function getTokenCookie(req: SessionRequest) {
|
|
const cookies = parseCookies(req);
|
|
return cookies[TOKEN_NAME];
|
|
}
|