我正在开发一个应用程序在mern堆栈使用http只cookie请求,而在前端处理它不工作,但在 Postman 它是工作,这里是代码生成令牌
import jwt from "jsonwebtoken";
const generateToken = (res, userId) => {
const token = jwt.sign({ userId }, process.env.JWT_SECRET, {
expiresIn: "10d",
});
res.cookie("jwt", token, {
httpOnly: true,
secure: true,
sameSite: "none",
maxAge: 10 * 24 * 60 * 60 * 1000,
});
};
export default generateToken;
字符串
这是路线图
import express from "express";
import {
authUser,
registerUser,
logoutUser,
getUserProfile,
updateUserProfile,
} from "../controllers/userController.js";
import { protect } from "../middleware/authMiddleware.js";
const router = express.Router();
router.post("/auth", authUser);
router.post("/", registerUser);
router.post("/logout", logoutUser);
router
.route("/profile")
.get(protect, getUserProfile)
.put(protect, updateUserProfile);
export default router;
型
这是服务器
import express from "express";
import dotenv from "dotenv";
import cookieParser from "cookie-parser";
import connectToDb from "./config/connectToDb.js";
import userRoutes from "./routes/userRoutes.js";
import { notFound, errorHandler } from "./middleware/errorMiddleware.js";
import cors from "cors";
import helmet from "helmet";
dotenv.config();
const port = process.env.PORT || 5000;
connectToDb();
const app = express();
app.use(helmet());
app.use(cors({ credentials: true }));
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(cookieParser());
app.use("/api/users", userRoutes);
app.get("/", (req, res) => {
res.send("Server is ready");
});
app.use(notFound);
app.use(errorHandler);
app.listen(port, () => {
console.log(`Server started at http://localhost:${port}`);
});
型
这里是前端的API调用
import { apiSlice } from "./apiSlice";
// Update the endpoint URL to localhost:5000
const USERS_URL = "/api/users";
export const usersApiSlice = apiSlice.injectEndpoints({
endpoints: (builder) => ({
login: builder.mutation({
query: (data) => ({
url: `${USERS_URL}/auth`,
method: "POST",
body: data,
}),
}),
register: builder.mutation({
query: (data) => ({
url: `${USERS_URL}`,
method: "POST",
body: data,
}),
}),
logout: builder.mutation({
query: () => ({
url: `${USERS_URL}/logout`,
method: "POST",
}),
}),
updateUser: builder.mutation({
query: (data) => ({
url: `${USERS_URL}/profile`,
method: "PUT",
body: data,
}),
}),
}),
});
export const {
useLoginMutation,
useLogoutMutation,
useRegisterMutation,
useUpdateUserMutation,
} = usersApiSlice;
型
我已经尝试更改以更改server.js中的凭据,并且将安全更改为true,并且还将sameSite更改为none,并且存在问题
1条答案
按热度按时间dsekswqp1#
我终于解决了这个问题,把代理添加到我的React应用程序中。