未在浏览器中设置Cookie-CORS /端口问题

时间:2020-02-09 22:38:01

标签: express cookies axios next.js lerna

上下文:

我只是使用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标头已从原始登录请求中按预期返回)

可能有用的信息:

  • 根据我运行我的应用程序的方式(在VSCode中进行调试与在终端中同时运行两个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 => {
        //...
      })
  • 我正在使用此功能设置cookie
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
  })
}

怀疑

0 个答案:

没有答案