Squishy Cookies 🍪

Easily sign and verify cookies.

Usage

import {
  createSignedCookie, verifySignedCookie,
} from 'https://deno.land/x/squishy_cookies/mod.ts'

const COOKIE_SECRET = Deno.env.get('COOKIE_SECRET') || 'super_secret'

// 1. Create a signed cookie

// Optional, headers or cookie string (to be used in Set-cookie header)
const { headers, cookie } = await createSignedCookie(
    'id', '1', COOKIE_SECRET,
    { httpOnly: true, path: '/' }
)
return new Response(page, { headers })

// or

const headers = new Headers()
headers.append('set-cookie', cookie)


// 2. Verifying a cookie

headers.append('cookie', cookie) // verifySignedCookie will search for 'cookie' header
const userId = await verifySignedCookie(headers, 'id', COOKIE_SECRET)
// userId is false if the verification failed or the cookie value
if (userId) {
  const user = await getUserById(userId.split('.')[0])
}

Tip to add multiple cookies

const { cookie: cookie1 } = await createSignedCookie(/* ... */)
const { cookie: cookie2 } = await createSignedCookie(/* ... */)

const response = new Response(someHTML, {
  // using headers as an array of arrays let you use
  // multiple headers with the same name
  headers: [
    ['Set-cookie', cookie1],
    ['Set-cookie', cookie2],
  ]
})