【发布时间】:2021-10-04 05:37:04
【问题描述】:
我有一个基本的身份验证设置,可以在localhost 中正常工作。当客户端向服务器发送请求时,它会将jwt token 作为cookie 分配回来。当我在生产中运行这个简单的登录时,注册设置正在工作,但 cookie 没有分配给客户端站点。
客户端:functions.js:
const { axios } = require("./axios");
const registerFunc = (name, email, password, ageName, ageDate) => {
return userServer
.post(
"/register",
{
name: name,
email: email,
password: password,
ageName: ageName,
ageDate: ageDate,
},
{
withCredentials: true,
}
)
.then((res) => {
return "success";
})
.catch((err) => {
return err.response.data;
});
};
服务器端:index.js:
const express = require("express");
const cors = require("cors");
require("dotenv").config();
const cookieParser = require("cookie-parser");
const authRoutes = require("./routes/auth");
const itemRoutes = require("./routes/item");
const app = express();
app.use(
cors({
origin: [
process.env.WEBSITE1_URL,
process.env.WEBSITE2_URL,
process.env.WEBSITE3_URL,
],
credentials: true,
exposedHeaders: ["set-cookie"],
})
);
app.use(express.json());
app.use(cookieParser());
app.use("/api/user", authRoutes);
app.use("/api/item", itemRoutes);
app.listen(5000, () => console.log("Server running"));
服务器端:routes/auth.js:
router.post("/register", async (req, res) => {
//Validate
const { error } = registerValidation(req.body);
if (error) return res.status(400).send(error.details[0].message);
const emailExist = await User.findOne({ email: req.body.email });
if (emailExist) return res.status(400).send("Email already exists");
//Hash Password
const salt = await bcrypt.genSalt(10);
const hashedPassword = await bcrypt.hash(req.body.password, salt);
User.create(
{
name: req.body.name,
email: req.body.email,
password: hashedPassword,
ageName: req.body.ageName,
ageDate: req.body.ageDate,
loggedIn: true,
},
(err, data) => {
if (err) {
res.status(400).send(err);
} else {
const token = jwt.sign({ _id: data._id }, process.env.TOKEN_SECRET);
const cookieExpiry = new Date();
cookieExpiry.setYear(cookieExpiry.getYear() + 8000);
res
.cookie("authToken", token, {
domain: "https://<client-url>.vercel.app",
httpOnly: true,
expires: cookieExpiry,
secure: true,
})
.cookie("loggedIn", true, {
domain: "https://<client-url>.vercel.app",
expires: cookieExpiry,
secure: true,
})
.send("Registerd");
}
}
);
});
编辑:
在控制台中,它给出了这个警告:
The attempt to set a cookie via a Set-Cookie was blocked because its Domain attribute was invalid with regards to the current host url
非常感谢任何帮助!
谢谢!
【问题讨论】:
标签: node.js reactjs express cookies axios