【发布时间】:2023-01-09 06:40:18
【问题描述】:
我在 express js 中有一个 api,它将令牌存储在客户端的 cookie 中(反应)。 cookie 仅在用户登录网站时生成。例如,当我用邮递员测试登录 api 时,会按预期生成 cookie,如下所示:
但是当我使用 react.js 登录时,在浏览器中找不到 cookie。看起来 cookie 没有传递到前端,如下面的屏幕截图所示:
当我们收到一条警告消息时,这意味着 express api 工作正常,没有任何错误!!
这是我在 express js 上的 index.js 文件,其中还包括 cookie-parser 中间件
require("dotenv").config();
const port = process.env.PORT || 5050;
const express = require("express");
const app = express();
const cors = require("cors");
const authRouter = require("./routes/auth");
var cookieParser = require('cookie-parser')
connect_db();
app.use(express.json());
app.use(cookieParser())
app.use(cors());
app.use("/" , authRouter);
app.listen(port , () => {
console.log("Server is running!!");
})
仅从 express api 设置 cookie 的代码 controller
const User = require("../models/user");
const jwt = require("jsonwebtoken");
const bcrypt = require('bcrypt')
const login = async (req, res) => {
const { email, password } = req.body;
try {
const checkDetails = await User.findOne({ email });
if (checkDetails) {
const { password: hashedPassword, token, username } = checkDetails;
bcrypt.compare(password, hashedPassword, function (err, matched) {
if (matched) {
res.cookie("token", token, { expires: new Date(Date.now() + (5 * 60000)) , httpOnly: true }).json({ "message": "You logged in sucessfully!" });
} else {
res.status(500).json({ "message": "Wrong password" });
}
});
} else {
res.status(500).json({ "message": "Wrong email" });
}
} catch (error) {
console.log(error.message);
}
}
这是我在不使用 package.json 文件中的代理的情况下从 api 获取数据的 react.js 代码
if (errors.length === 0) {
const isLogin = await fetch("http://localhost:5000/api/login", {
method: "POST",
body: JSON.stringify({ email, password }),
headers: {
"Content-Type": "application/json"
}
});
const res = await isLogin.json();
if(res) alert(res.message);
}
我想知道这个“在邮递员中而不是在浏览器中获取cookie”背后的原因是什么。我需要使用任何反应包吗?
网络选项卡屏幕截图可能对您有所帮助。
If I see in the network tab I get the same cookie, set among the other headers
【问题讨论】:
-
你能提供你如何发送cookie的代码吗?
标签: javascript node.js reactjs express cookies