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.
→ I wrote 17 books to help you become a better developer:
- C Handbook
- Command Line Handbook
- CSS Handbook
- Express Handbook
- Git Cheat Sheet
- Go Handbook
- HTML Handbook
- JS Handbook
- Laravel Handbook
- Next.js Handbook
- Node.js Handbook
- PHP Handbook
- Python Handbook
- React Handbook
- SQL Handbook
- Svelte Handbook
- Swift Handbook
Also, JOIN MY CODING BOOTCAMP, an amazing cohort course that will be a huge step up in your coding career - covering React, Next.js - next edition February 2025