在expressjs (react和nodejs应用)中无法检索刷新cookie



我无法检索之前发送的cookie。

作为登录的一部分,我返回了一个刷新令牌作为httpOnly cookie。

const payload = {name, email};
console.log("payload: ", payload);
const accessToken = jsonwebtoken.sign(payload, process.env.ACCESS_TOKEN_KEY, { expiresIn: '15m' });
const refreshToken = jsonwebtoken.sign(payload, process.env.REFRESH_TOKEN_KEY, { expiresIn: '1d' });
console.log("Access  Token:", accessToken);   // access token is generated
console.log("Refresh Token:", refreshToken);  // refresh token is generated
res.cookie('refreshToken', refreshToken, { httpOnly: true, secure: false, sameSite: 'Lax', maxAge: 24*60*60*1000 }); // call succeeded. what is the name of cookie?
res.json({ accessToken });

之后在刷新端点我寻找一个cookie,但找不到它:

export const handleRefreshToken = async (req, res) => {
console.log("Request Cookies", req.cookies);
const cookies = req.cookies;
if (!cookies?.refreshToken) return res.sendStatus(401);

我看到了以下cookie:

  • _ga:"xxxxxxxxxxxxxxxxx",
  • _gid:"xxxxxxxxxxxxxxxx",
  • _gat_gtag_UA_xxxxxx:"x",
  • _ga_QPY49S2WC4:"xxxxxxxxxxxxxxxxxxx">

这是我的开发环境,nodejs运行在localhost:5000上。

使用devtools (Network),我在客户端响应中看到cookie。cookie的名称是'refreshToken'。但是,当我在浏览器上查看cookie时,cookie并没有显示在浏览器上。也许,cookie没有保留在浏览器上。有什么建议吗?

更新2@Konrad Linkowski提供的链接起作用了。当客户端发出axios请求时,我需要选项"{withCredentials: true}"

客户端错误。快递代码正常运行。这个链接解释了它:Axios支持Set-Cookie吗?是否有可能通过Axios HTTP请求进行身份验证?

我在客户端的原始调用(使用axios)是:

const res = await axios.post('/login', { ident: email, password });

应该是:

const res = await axios.post('/login', { ident: email, password }, { withCredentials: true });

最新更新