import jwt from "jsonwebtoken";
import express from 'express';
import cors from 'cors';
const app = express();
app.use(cors({
origin: "https://nexcommerce.netlify.app",
credentials: true, // Allows cookies to be sent with requests
}));
const generateToken = (res, userId) => {
console.log("creating token")
const token = jwt.sign({ userId }, process.env.JWT_SECRET, {
expiresIn: "30d",
});
// Set JWT as an HTTP-Only Cookie
res.cookie("jwt", token, {
httpOnly: true,
secure: process.env.NODE_ENV === "production",
sameSite: "strict",
path: "/",
maxAge: 30 * 24 * 60 * 60 * 1000,
});
return token;
};
export default generateToken;
我的这段代码在浏览器的网络部分正确返回了 jwt 令牌,但它没有在浏览器的 cookie 中设置 jwt 令牌。如果有人引导我摆脱困境,这将是一个很大的帮助。
这有一些问题。让我们看看它们:-
JS 函数参数按值传递,而不是引用。因此,在另一个函数中执行 res.cookie 不会改变原始值。 https://www.w3schools.com/js/js_function_parameters.asp#:~:text=%20parameters%2C%20in%20a%20函数,更改%20%20参数的%20原始%20值.
generateToken
应该是一个专门用于生成令牌的函数。在这里添加 cookie 可以消除此函数中的关注点。
因此,您可以将 res.cookie 逻辑移至主函数中来解决这两个问题,并且您的应用程序应该可以正常工作。