From 5923dd77c17c80747f9fe746ff8270ad4c820003 Mon Sep 17 00:00:00 2001 From: Daniel Date: Tue, 18 Oct 2022 15:52:49 +0200 Subject: adding cookies to api route response [simple result] (#5060) * adding cookies to the an api route response, also when returning a simple result * in dev server, convert a simple endpoint result into a response object Co-authored-by: AirBorne04 Co-authored-by: AirBorne04 <> Co-authored-by: Matthew Phillips --- examples/ssr/src/api.ts | 1 + examples/ssr/src/models/user.ts | 7 ------- examples/ssr/src/pages/api/cart.ts | 12 +++++------- examples/ssr/src/pages/cart.astro | 3 +-- examples/ssr/src/pages/login.astro | 27 +++++++++++++++++++++++++++ examples/ssr/src/pages/login.form.async.ts | 16 ++++++++++++++++ examples/ssr/src/pages/login.form.js | 9 --------- examples/ssr/src/pages/login.form.ts | 16 ++++++++++++++++ 8 files changed, 66 insertions(+), 25 deletions(-) delete mode 100644 examples/ssr/src/models/user.ts create mode 100644 examples/ssr/src/pages/login.form.async.ts delete mode 100644 examples/ssr/src/pages/login.form.js create mode 100644 examples/ssr/src/pages/login.form.ts (limited to 'examples/ssr/src') diff --git a/examples/ssr/src/api.ts b/examples/ssr/src/api.ts index 32b48e220..1be1f54f0 100644 --- a/examples/ssr/src/api.ts +++ b/examples/ssr/src/api.ts @@ -28,6 +28,7 @@ async function get( ): Promise { const response = await fetch(`${getOrigin(incomingReq)}${endpoint}`, { credentials: 'same-origin', + headers: incomingReq.headers, }); if (!response.ok) { // TODO make this better... diff --git a/examples/ssr/src/models/user.ts b/examples/ssr/src/models/user.ts deleted file mode 100644 index a2812a8ad..000000000 --- a/examples/ssr/src/models/user.ts +++ /dev/null @@ -1,7 +0,0 @@ -import lightcookie from 'lightcookie'; - -export function isLoggedIn(request: Request): boolean { - const cookie = request.headers.get('cookie'); - const parsed = lightcookie.parse(cookie); - return 'user-id' in parsed; -} diff --git a/examples/ssr/src/pages/api/cart.ts b/examples/ssr/src/pages/api/cart.ts index d8bfa31a0..80db01f16 100644 --- a/examples/ssr/src/pages/api/cart.ts +++ b/examples/ssr/src/pages/api/cart.ts @@ -1,10 +1,9 @@ import { APIContext } from 'astro'; -import lightcookie from 'lightcookie'; import { userCartItems } from '../../models/session'; -export function get({ request }: APIContext) { - let cookie = request.headers.get('cookie'); - let userId = cookie ? lightcookie.parse(cookie)['user-id'] : '1'; // default for testing +export function get({ cookies }: APIContext) { + let userId = cookies.get('user-id').value; + if (!userId || !userCartItems.has(userId)) { return { body: JSON.stringify({ items: [] }), @@ -23,11 +22,10 @@ interface AddToCartItem { name: string; } -export async function post({ request }: APIContext) { +export async function post({ cookies, request }: APIContext) { const item: AddToCartItem = await request.json(); - let cookie = request.headers.get('cookie'); - let userId = lightcookie.parse(cookie)['user-id']; + let userId = cookies.get('user-id').value; if (!userCartItems.has(userId)) { userCartItems.set(userId, new Map()); diff --git a/examples/ssr/src/pages/cart.astro b/examples/ssr/src/pages/cart.astro index 68286ac61..d153e3ea9 100644 --- a/examples/ssr/src/pages/cart.astro +++ b/examples/ssr/src/pages/cart.astro @@ -2,9 +2,8 @@ import Header from '../components/Header.astro'; import Container from '../components/Container.astro'; import { getCart } from '../api'; -import { isLoggedIn } from '../models/user'; -if (!isLoggedIn(Astro.request)) { +if (!Astro.cookies.get('user-id').value) { return Astro.redirect('/'); } diff --git a/examples/ssr/src/pages/login.astro b/examples/ssr/src/pages/login.astro index 1b3cb9ede..45643665e 100644 --- a/examples/ssr/src/pages/login.astro +++ b/examples/ssr/src/pages/login.astro @@ -11,6 +11,32 @@ import Container from '../components/Container.astro'; font-size: 36px; } + +
@@ -26,6 +52,7 @@ import Container from '../components/Container.astro'; +
diff --git a/examples/ssr/src/pages/login.form.async.ts b/examples/ssr/src/pages/login.form.async.ts new file mode 100644 index 000000000..f98b11cfe --- /dev/null +++ b/examples/ssr/src/pages/login.form.async.ts @@ -0,0 +1,16 @@ +import { APIContext, APIRoute } from 'astro'; + +export const post: APIRoute = ({ cookies, params, request }: APIContext) => { + // add a new cookie + cookies.set('user-id', '1', { + path: '/', + maxAge: 2592000, + }); + + return { + body: JSON.stringify({ + ok: true, + user: 1, + }), + }; +}; diff --git a/examples/ssr/src/pages/login.form.js b/examples/ssr/src/pages/login.form.js deleted file mode 100644 index 134b0185f..000000000 --- a/examples/ssr/src/pages/login.form.js +++ /dev/null @@ -1,9 +0,0 @@ -export function post(params, request) { - return new Response(null, { - status: 301, - headers: { - Location: '/', - 'Set-Cookie': 'user-id=1; Path=/; Max-Age=2592000', - }, - }); -} diff --git a/examples/ssr/src/pages/login.form.ts b/examples/ssr/src/pages/login.form.ts new file mode 100644 index 000000000..de75c8cb3 --- /dev/null +++ b/examples/ssr/src/pages/login.form.ts @@ -0,0 +1,16 @@ +import { APIContext } from 'astro'; + +export function post({ cookies, params, request }: APIContext) { + // add a new cookie + cookies.set('user-id', '1', { + path: '/', + maxAge: 2592000, + }); + + return new Response(null, { + status: 301, + headers: { + Location: '/', + }, + }); +} -- cgit v1.2.3