在实时网站中将 jwt 令牌设置为 cookie

问题描述 投票:0回答:1
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 令牌。如果有人引导我摆脱困境,这将是一个很大的帮助。

node.js express cookies jwt
1个回答
0
投票

这有一些问题。让我们看看它们:-

  1. JS 函数参数按值传递,而不是引用。因此,在另一个函数中执行 res.cookie 不会改变原始值。 https://www.w3schools.com/js/js_function_parameters.asp#:~:text=%20parameters%2C%20in%20a%20函数,更改%20%20参数的%20原始%20值.

  2. generateToken
    应该是一个专门用于生成令牌的函数。在这里添加 cookie 可以消除此函数中的关注点

因此,您可以将 res.cookie 逻辑移至主函数中来解决这两个问题,并且您的应用程序应该可以正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.