我无法检索之前发送的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 });