[英]How to get cookies in getServerSideProps NextJS
In my User page I'm using getServerSideProps
to get user's data.在我的用户页面中,我使用
getServerSideProps
来获取用户的数据。
At console.log
number 1 you can see that cookies
with tokens are exsists.在第 1 号
console.log
中,您可以看到带有令牌的cookies
存在。 But at console.log number 2 cookies
are empty但是在 console.log 编号 2
cookies
是空的
Also I did same request inside useEffect
And it works as I expect.我也在
useEffect
中做了同样的请求,它按我的预期工作。 And at the console.log
number 2 cookies object contains tokens.在
console.log
编号 2 cookies object 包含令牌。
How to set cookies
for getServerSideProps
request?如何为
getServerSideProps
请求设置cookies
?
export async function getServerSideProps({req, res}) { console.log(1, req.cookies) const response = await $api.get(`/store/profile/user`, {withCredentials: true}) return { props: {} } } const User: NextPage = ({props}) => { const getData = async () => { const response = await $api.get(`/store/profile/user`, {withCredentials: true}) } React.useEffect(() => { getData() }, []) return ( <LoginLayout> <ProfileLayout> <UserInfo /> </ProfileLayout> </LoginLayout> ) } export default User
export default async function refresh(req, res, next) { try { console.log(2, req.cookies) const {refreshToken} = req.cookies const userData = await userService.refresh(refreshToken) res.cookie("refreshToken", userData.refreshToken, {maxAge: 5 * 24 * 60 * 60 * 1000, httpOnly: true}) return res.json(userData) } catch (e) { res.status(e.status).json({message: e.message}) } }
logs for getServerSideProps request: getServerSideProps 请求的日志:
1 { refreshToken: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6InpoZW4uYWxleGVlZmZAZ21haWwuY29t', token:'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6InpoZW4uYWxleGVlZmZAZ21haWwuY29tIiThm' } 2 {}
logs for request inside useEffect: useEffect 中的请求日志:
2 { refreshToken: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6InpoZW4uYWxleGVlZmZAZ21haWwuY29ih', token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6InpoZW4uYWxleGVlZmZAZ21haWwuY29tIiwiaWQg' }
First install cookie package using npm首先使用 npm 安装 cookie package
npm install cookie
and then import it where you need it然后在需要的地方导入
import cookie from "cookie";
and the rest must be something like the following:并且 rest 必须类似于以下内容:
export const getServerSideProps = async (context) => {
const mycookie = cookie.parse(
(context.req && context.req.headers.cookie) || ""
);
let cookieNameData = {};
if (mycookie.whatevercookienameis) {
cookieNameData = mycookie.whatevercookienameis;
}
return {
props: {
cookieNameData
}
}
}
Hope it gives you a clear picture how to achieve it.希望它能让您清楚地了解如何实现它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.