上下文:
我只是使用Lerna拆分了现有的Next.js / Express应用程序,将Next.js服务器(服务于localhost:3000
的前端)和Express服务器(服务于localhost:4000
的API分开了)。结果,我必须使用默认的axios
创建一个{baseUrl: localhost:4000}
实例,因此我的相对路径调用将继续起作用(即axios.post('/api/auth/login', {...})
)。当服务器同时提供API和Nextjs应用程序时,所有这些工作就可以进行了。
问题:
此切换后,我的身份验证流程不再正常运行。照常登录后,页面刷新将清除用户会话的所有内存。据我所知,尚未设置Cookie。我在开发工具中看不到它,并且当应用程序进行后续调用时,没有cookie。
安装我的应用程序后,它将调用api/me
来查看用户是否已登录。如果已登录,它将使用用户信息进行响应,以将应用程序与用户信息结合在一起。如果不是,它不会做任何特别的事情。对/api/me
的请求不再包含由登录调用设置的持久性cookie。 (dev-tools显示Set-Cookie
标头已从原始登录请求中按预期返回)
可能有用的信息:
yarn dev
命令),我将收到CORS错误。我使用的cors
软件包没有配置:app.use(cors())
/api/me
的调用如下:// API.js
`export default axios.create({baseURL: 'http://localhost:4000'})`
// app.js
import API from 'API'
API({
method: 'get',
url: '/api/me'
})
.then(r => {
//...
})
function setCookie(res, token, overwrite, sameSite = true) {
res.cookie(cookieName, token, {
httpOnly: true,
sameSite: sameSite,
secure: process.env.NODE_ENV === 'production',
expires: new Date(Date.now() + cookieExpiration),
overwrite: !!overwrite
})
}
怀疑
sameSite
(thought it wouldn't matter)