Javascript ExpressJS:在进行身份验证时,我是从后端还是前端存储JWT令牌?

Javascript ExpressJS:在进行身份验证时,我是从后端还是前端存储JWT令牌?,javascript,node.js,cookies,Javascript,Node.js,Cookies,我继承了一个后端Express API和一个前端React应用程序 目前我在我的POST/loginAPI中使用cookie解析器,如下所示: res.cookie('something', 'abc123', { maxAge: COOKIE_MAX_AGE }); 在我的前端应用程序上,有一个用于检查身份验证令牌是否存在的功能: export function isAuthCookiePresent() { console.log('ALL COOKIES:

我继承了一个后端Express API和一个前端React应用程序

目前我在我的
POST/login
API中使用
cookie解析器
,如下所示:

    res.cookie('something', 'abc123', {
      maxAge: COOKIE_MAX_AGE
    });
在我的前端应用程序上,有一个用于检查身份验证令牌是否存在的功能:

export function isAuthCookiePresent() {
  console.log('ALL COOKIES:', cookies.get());
  return (
    cookies.get(AUTH_COOKIE_NAME) && cookies.get(AUTH_COOKIE_NAME) !== null
  );
}

正如所料,我在控制台日志中看到了
{something:'abc123'}

但是,当我尝试使用Vercel()中的自动部署分支登录时,cookie丢失了

我的印象是饼干应该放在前端?但是在代码中,cookie是在后端设置的。我在代码中没有看到任何东西可以将它传递到前端。我想我会在前端找到类似的东西,上面会有一个“成功登录后,执行
cookies.set”(“x-auth-token”,res.body.token)

我觉得奇怪的是,它在本地工作。有人能解释一下这是怎么回事吗?我以为cookies存储在客户端的浏览器中。但如果这是真的,为什么cookie解析器甚至存在于express中,为什么它被用于服务器端

但是,当我尝试使用Vercel()中的自动部署分支登录时,cookie丢失了

这是因为您似乎正在设置cookie服务器端,据我所知,vercel只处理客户端,不允许您使用express


我的印象是饼干应该放在前端?但是在代码中,cookie是在后端设置的。我在代码中没有看到任何东西可以将它传递到前端。我想我会在前端找到类似的东西,上面会有一个“成功登录后,执行cookies.set”(“x-auth-token”,res.body.token)”

Cookie实际上可以通过标题进行设置(
set Cookie:=
),而express的
res.Cookie
就是这样做的。说:

HTTP响应头用于将Cookie从服务器发送到用户代理,以便用户代理稍后可以将其发送回服务器。要发送多个Cookie,应在同一响应中发送多个
设置Cookie


我觉得奇怪的是,它在本地工作。有人能解释一下这是怎么回事吗?我以为cookies存储在客户端的浏览器中。但如果这是真的,为什么cookie解析器甚至存在于express中,为什么它被用于服务器端

事实上,Cookies存储在客户端。它们可以通过客户端javascript和带有cookie头的后端进行访问。需要使用
cookie解析器
模块来解析
cookie
头()发送的
name=value
语法。它被用于服务器端,因为在前端验证Cookie会让任何用户为您用于验证Cookie的if语句提供错误的“true”值



作为对这个问题的回答:我建议使用后端,因为JWT必须进行签名,在客户端设置并对其进行签名将允许任何人对任意负载进行签名。

感谢您对Vercel的解释。因此,在本地,假设cookie是使用
res.cookie()
在响应上设置的,那么当我在
cookie.set(foo,bar)
的前端上没有看到任何代码时,前端如何看待它呢?本地发生的事情和Vercel上发生的事情有什么区别?它在本地使用HTTP头(请参阅)。浏览器解释响应中的标题并使用它设置cookie。在vercel上,您使用的是无服务器功能吗?(否则,无法从后端在那里设置cookie)。如果我错了,请纠正我,但是vercel不允许您使用express,那么您如何在vercel上启动服务器?噢,我想我现在可以使用Set Cookie了!所以我只使用Vercel部署我的前端开发分支,而我的后端服务器位于Google云中的其他地方。我想我得想办法看看Set Cookie是否能在Vercel上使用。可能是因为我正在使用
res.status(http.OK).json({redirect:redirectUrl,token})
重定向它,而我应该做一些类似于这个家伙的事情: