I am developing a web app with react front-end and node baack-end
I want to delete the cookie being stored so that I can successfully be able to logout the user. I have tried using the js-cookie library and react-cookie library but it does not work.
nav_component:
import React from "react"; import { Link, useHistory } from "react-router-dom"; import { useSelector } from "react-redux"; import { NavDropdown } from "react-bootstrap"; import Cookies from "js-cookie"; function Nav() { const user = useSelector((state) => state.user); const { name, id, loginId } = user; const history = useHistory(); function logout() { Cookies.remove("userId", { path: "/", domain: "localhost" }); localStorage.clear(); history.push("/login"); } return ( <nav className="navbar navbar-expand navbar-light fixed-top"> <ul class="nav"> <li class="nav-item"> <Link to={"/"} class="nav-link active" aria-current="page"> Home </Link> </li> <li class="nav-item"> <Link to={"/register"} class="nav-link"> Register </Link> </li> <li class="nav-item"> <Link to={"/login"} class="nav-link"> Login </Link> </li> <li class="nav-item"> <Link to={"/admin"} class="nav-link" tabindex="-1" aria-disabled="true" > Admin </Link> </li> </ul> {name ? ( <ul class="username"> <li> <NavDropdown title={name}> <NavDropdown.Item> {id}: {loginId} </NavDropdown.Item> <NavDropdown.Item onClick={logout}>Logout</NavDropdown.Item> </NavDropdown> </li> </ul> ) : null} </nav> ); } export default Nav;
How I set the cookie in the backend:
app.use(cookieParser()); app.use( express.urlencoded({ extended: true, }) ); app.use( session({ key: "userId", secret: "subscribe", resave: false, saveUninitialized: false, cookies: { expires: 60 * 60 * 8, }, }) ); app.get("/login", (req, res) => { if (req.session.user) { res.send({ loggedIn: true, user: req.session.user }); } else { res.send({ loggedIn: false }); } }); app.post("/login", (req, res) => { const LoginID = req.body.LoginID; const Password = req.body.Password; db.query( "SELECT * FROM usermst WHERE LoginID = ? AND password = ?", [LoginID, Password], (err, result) => { if (err) { res.send({ err: err }); } if (result.length > 0) { const userid = result[0].UserID; const token = jwt.sign({ userid }, "jwtSecret", { expiresIn: 60 * 60 * 24, }); req.session.user = result; res.json({ auth: true, token: token, result: result }); } else { res.send({ message: "Wrong LoginID/Password combination" }); } } ); });
It should be noted that in my backend there is some code related to JWT tokens but I have not yet implemented that in my front-end. The only thing that I have implemented is the cookie and session.
Advertisement
Answer
In my backend I added this code for logging out to which I made an axios reques from the frontend:
res.clearCookie("userId", { path: "/" }); res .status(200) .json({ success: true, message: "User logged out successfully" }); }; app.get("/logout", logout, (req, res) => { res.send("You have been logged out successfully"); });
Whereby “userId” id the name of the cookie