Next.js как получить Cookies в getInitialProps

Доброго времени суток!

Мне требуется в getInitialProps обработать cookies которые находятся на клиенте. req.headers.cookie = undefined но req.headers имеет некоторые данные ( с какой страницы был запрос и тд. )

Как указать клиенту что именно на этой странице он должен отправить куки либо лишь некоторые данные куков?

export default function (Component) {
    return class checkAuth extends Component {
        static async getInitialProps({ req }) {

            let check;
            const cookies = new Cookies(req.cookies);
            console.dir(req.cookies); // undefined
            let token = cookies.get('token');
            console.log(token); //undefined
            let response = await fetch(`http://localhost:3001/admin/check`, {
                method: 'POST',
                headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
                body: new URLSearchParams(`token=${token}`)
            })
            if (response.ok) {
                const request = await response.json();
                if (request.values.admin == 1) {
                    check = true
                }
                else {
                    check = false
                }
            }
            else {
                cookies.remove('token', { path: '/admin/*' })
                check = false
            }

            return { check }

        }

        renderProtectedPage = () => {
            const { check } = this.props;

            if (check) {
                return <Component {...this.props} />
            } else {
                return <Error statusCode={404} />
            }

        }
        render() {
            return this.renderProtectedPage();
        }
    }

Буду очень благодарен за помощь!


Ответы (1 шт):

Автор решения: Артур Франк

Спустя некоторое время и метод тыка и все же нашел решение моей проблемы.

Для удобства создал функцию parseCookies :

import cookie from 'cookie'

export default function parseCookies(req) {
    return cookie.parse(req ? req.headers.cookie || "" : document.cookie);
}

Да-да именно req.headers.cookie а не req.cookies

Она вернет куки которые есть у вас в браузере согласно директории

Далее убрал в вызове функций у пакета universal-cookies все опции:

//было
cookies.remove('token', { path: '/admin/*' })
cookies.set('token', token, { path: '/admin/*' })
cookies.get('token', { path: '/admin/*' })

//стало
cookies.remove('token')
cookies.set('token', token)
cookies.get('token')

// при создании куков параметр path указывается автоматически..
// для url http://localhost:3000/admin/login path будет равняться /admin 
// и куки будут отправляться на всей директории /admin/*

полезен был видосик из ютуба на который наткнулся случайно и не придал особого значения : тут

→ Ссылка