How to get cookies server-side in a Next.js app
Accessing cookies while server-side rendering in Next.js can be harder than you think. Here's how I solved it.
I had this problem. My app depended on cookies for authentication, and using Next.js apparently my cookies were not set on first page initialization.
I had this code, which was in charge of hitting a GET endpoint using Axios:
Bookings.getInitialProps = async ctx => {
const response = await axios.get('http://localhost:3000/api/bookings/list')
return {
bookings: response.data
}
}
I had Passport.js on the server side endpoint, but it failed to authenticate the user on the SSR page, because it didn’t find any cookie.
I had to change my code to this, adding the cookies to the headers
:
Bookings.getInitialProps = async ctx => {
const response = await axios({
method: 'get',
url: 'http://localhost:3000/api/bookings/list',
headers: ctx.req ? { cookie: ctx.req.headers.cookie } : undefined
})
return {
bookings: response.data
}
}
The key to making cookies available in the backend was adding:
headers: ctx.req ? { cookie: ctx.req.headers.cookie } : undefined
to the Axios configuration.
→ Get my Next.js (pages router) Handbook
I wrote 21 books to help you become a better developer:
- HTML Handbook
- Next.js Pages Router Handbook
- Alpine.js Handbook
- HTMX Handbook
- TypeScript Handbook
- React Handbook
- SQL Handbook
- Git Cheat Sheet
- Laravel Handbook
- Express Handbook
- Swift Handbook
- Go Handbook
- PHP Handbook
- Python Handbook
- Linux Commands Handbook
- C Handbook
- JavaScript Handbook
- Svelte Handbook
- CSS Handbook
- Node.js Handbook
- Vue Handbook