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/*
полезен был видосик из ютуба на который наткнулся случайно и не придал особого значения : тут