浏览器中未设置 Cookies

问题描述 投票:0回答:1

我正在制作一个简单的express.js应用程序,它有一个发送请求的登录表单,如果经过身份验证,则重定向到前端页面并将JWT令牌附加到网站的cookie。正在生成 JWT 令牌,正在重定向用户,但未设置任何令牌。

这是 server.js:

app.use(cookieParser());

const allowedOrigins = ['http://127.0.0.1:5501', 'http://127.0.0.1:5500']; // Live server ports

app.use(cors({
    origin: allowedOrigins,
    credentials: true // Permite envio de cookies e outras credenciais
}));

dotenv.config()
app.use(express.json())
app.use(express.urlencoded({ extended: true }))

登录路径如下:

router.post('/', (req, res) => {
    console.log('\n\n\n-----------------------/LOGIN/--------------------------');
    const { login, senha } = req.body;

    try {
        const users = ler_dbJSON();
        const conta = users.filter(user => user.senha === senha && user.login === login);

        if (conta.length > 0) {
            const contaVerificada = conta[0]
            const secret = process.env.SECRET;
            const token = jwt.sign({ id: contaVerificada.id }, secret, { expiresIn: "7d" });

            console.log("Token: ", token)
            res.cookie("token", token, {
                httpOnly: true,
                sameSite: 'lax',
                secure: true
            });

            const responseUrl = contaVerificada.adm === true ? "page1.html" : `pages2.html`;
            console.log('-----------------------/LOGIN/--------------------------\n\n\n');
            return res.status(200).json({ url: responseUrl });

        } else {
            return res.status(401).json({ msg: "Login ou senha incorretos." });
        }
    } catch (err) {
        return res.status(500).json({ msg: "Ocorreu um erro ao carregar o banco de dados", erro: err.message });
    }
});

最后是前端的请求

axios.post(api_url, {
        login: login,
        senha: senha
    }, { withCredentials: true }

我已经使用邮递员测试了路线,它工作得很好。在前端它部分工作,我按预期被重定向到正确的页面,但不存在 cookie(通过检查页面并使用 console.log() 进行测试,两者都显示了一个没有 cookie 的页面。)

javascript express localhost
1个回答
0
投票

选项1:

检查 res.cookie 中的安全选项

secure: true 选项意味着 cookie 将仅通过 HTTPS 设置。如果您在没有 HTTPS 的本地主机上进行测试,这将阻止设置 cookie。

要解决此问题,请在本地开发期间设置 secure: false,或者添加逻辑以根据环境动态设置它:

res.cookie("token", token, {
    httpOnly: true,
    sameSite: 'lax',
    secure: process.env.NODE_ENV === 'production' // Only set secure in production
});

选项 2:调试 Set-Cookie 标头

要确认 cookie 确实正在发送,您可以在浏览器的开发人员工具中检查响应标头(在“网络”>“响应标头”下)。登录请求后,在后端的响应中查找 Set-Cookie 标头。

如果缺少Set-Cookie,则可能表明服务器端的cookie设置方式存在问题。

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