Quiero almacenar el token jwt como una cookie de express.js (backend) a react.js (frontend). También instalé el paquete cookie-parser y lo uso en el archivo main.js (lado del servidor) y creé las cookies usando res.cookies . si lo intento con el cartero, el cartero muestra que las cookies se generan correctamente, pero si lo intento con la reacción, las cookies no se almacenan.
código expreso:
const login = async (req, res, next) => { try { // geting the user email and the password const { userEmail, userPass } = req.body; // 1st we are checking that email and the password are existing if (!userEmail || !userPass) { return next("Plz enter valid email and password"); } console.log(userEmail, userPass); // 2nd if usre is existing than password is correct or not const user = await userModel.findOne({ userEmail }).select("+password"); const correct = await user.correctPassword(userPass, user.password); if (!userEmail || !correct) { return next("Wrong credentials"); } // 3rd if everything is ok then we send the token to the client const userToken = signToken(user._id); // here we passing the token by using cookie res.cookie("jwt", userToken, { expires: new Date(Date.now() + 500000), httpOnly: true, secure: false, }); // console.log(userToken); res.status(200).json({ status: " successfully Login", }); } catch (error) { res.status(400).json({ status: "fail", data: next(error), }); } };El código de reacción está aquí:
const Login = () => { const [userLogin, setUserLogin] = useState({ userEmail: "", userPass: "", }); let name, value; const handelInputs = (e) => { name = e.target.name; value = e.target.value; setUserLogin({ ...userLogin, [name]: value }); }; const log = async () => { const response = await axios.post("/login", userLogin, { withCredentials: true, credentials: "include", }) };Según https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies
Una cookie con el atributo HttpOnly es inaccesible para la API JavaScript Document.cookie; solo se envía al servidor. Por ejemplo, las cookies que persisten en las sesiones del lado del servidor no necesitan estar disponibles para JavaScript y deben tener el atributo HttpOnly. Esta precaución ayuda a mitigar los ataques de secuencias de comandos entre sitios (XSS).
Simplemente cambia
httpOnly: truea
httpOnly: false