gpt4 book ai didi

node.js - react + 下一步 : Not sending cookies from server-side to backend

转载 作者:行者123 更新时间:2023-12-02 12:25:08 35 4
gpt4 key购买 nike

我正在使用 kubernetes 作为后端(微服务)和 React(客户端)。

能够通过 cookie 发送/验证当请求从浏览器发送(客户端)但是当应用首次加载时(服务器side),我无法进行身份验证。

这意味着它没有从服务器端发送请求

Proof:

AppComponent.getInitialProps = async (appContext) => {
let data = {};
const client = apiRequest(appContext.ctx); // <== custom axios instance
console.log(`${appContext.ctx.req.headers}`); // <== This is showing null
try {
const res = await client.post('/api/users/currentuser'); // <== to check logged in user
data = res.data;
catch (err) {
if (err) data = { currentUser: null }
}
let pageProps = {};
if (appContext.Component.getInitialProps) {
pageProps = await appContext.Component.getInitialProps()
}
return { pageProps, ...data }
}

Custom axios function:

export const apiRequest = ({ req }) => {
if (typeof window === undefined) {
// we are on server side
return axios.create({
baseURL: 'http://ingress-nginx-controller.ingress-nginx.svc.cluster.local',
// to pass cookies and hostname needed by ingress while resolving the request coming
headers: req.headers
})
}
return axios.create({
baseURL: "/"
})
}

最佳答案

我(也是?)围绕这个问题开设在线类(class)并遇到了同样的问题。问题是某些对 getInitialProps() 的调用由于某种原因并不总是包含应用程序上下文。不幸的是,对于失败的原因,我没有直接的答案。关于丢失的 cookie,您可能要求您的 cookie 仅通过安全的 https 连接发送?例如,这是我在我的项目中得到的:

app.use(
cookieSession({
name: "teekeet.com session",
signed: false, // Disable cookie encryption to better support different service platforms (java, ruby, nodejs etc)
secure: process.env.NODE_ENV !== "test", // Cookies should only be used over HTTPs
maxAge: 1 * 10 * 60 * 1000, // 10mins
})
);

无论如何,假设您运行的是 NextJS 的 9.3+ 版本,那么您应该转向提供显式服务器端渲染 Hook 的较新 API。特别是 getServerSideProps() API。NextJS 文档很好地解释了如何使用新功能。查看their guide here .另外,请随意浏览我在 github 中的项目。作为引用。

关于node.js - react + 下一步 : Not sending cookies from server-side to backend,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63833184/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com