Skip to content

Instantly share code, notes, and snippets.

@yoovanr
Last active June 30, 2021 11:55
Show Gist options
  • Save yoovanr/05e18ca38dea1a4cefa63b9fe35faa25 to your computer and use it in GitHub Desktop.
Save yoovanr/05e18ca38dea1a4cefa63b9fe35faa25 to your computer and use it in GitHub Desktop.
// utils/cookies.js
import Cookies from 'cookies'
import cookieCutter from 'cookie-cutter'
// Default server side cookies instance
let serverSideCookiesInstance = null
// Set a new server side cookies instance
const setServerSideCookiesInstance = (ctx) => {
serverSideCookiesInstance = new Cookies(ctx.req, ctx.res)
}
// Get server side cookies instance
const getServerSideCookiesInstance = () => {
return serverSideCookiesInstance
}
// Remove server side cookies instance
const removeServerSideCookiesInstance = () => {
serverSideCookiesInstance = null
}
// Set a cookie
const setItem = (key, value, options = {}) => {
if (process.browser) {
cookieCutter.set(key, value, options)
} else if (serverSideCookiesInstance) {
serverSideCookiesInstance.set(key, value, options)
}
}
// Get a cookie
const getItem = (key) => {
let item = null
if (process.browser) {
item = cookieCutter.get(key)
} else if (serverSideCookiesInstance) {
item = serverSideCookiesInstance.get(key)
}
return item
}
// Remove a cookie
const removeItem = (key, options = {}) => {
// To remove a cookie, use a date in the past, example: { expires: new Date(0) }
if (process.browser) {
cookieCutter.set(key, '', { ...options, expires: new Date(0) })
} else if (serverSideCookiesInstance) {
serverSideCookiesInstance.set(key, '', { ...options, expires: new Date(0) })
}
}
export default {
setServerSideCookiesInstance,
getServerSideCookiesInstance,
removeServerSideCookiesInstance,
setItem,
getItem,
removeItem,
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment