Untitled
unknown
plain_text
3 years ago
4.3 kB
9
Indexable
const User = require("../models/user.model"); const bcrypt = require("bcryptjs"); const jwt = require("jsonwebtoken"); const signup = async (req, res, next) => { const { name, email, password } = req.body; let existingUser; try { existingUser = await User.findOne({ email: email }); } catch (err) { console.log(err); } if (existingUser) { return res .status(400) .json({ message: "User already exists! Login Instead" }); } const hashedPassword = bcrypt.hashSync(password); const user = new User({ name, email, password: hashedPassword, }); try { await user.save(); } catch (err) { console.log(err); } return res.status(201).json({ message: user }); }; const login = async (req, res, next) => { const { email, password } = req.body; let existingUser; try { existingUser = await User.findOne({ email: email }); } catch (err) { return new Error(err); } if (!existingUser) { return res.status(400).json({ message: "User not found. Signup Please" }); } const isPasswordCorrect = bcrypt.compareSync(password, existingUser.password); if (!isPasswordCorrect) { return res.status(400).json({ message: "Inavlid Email / Password" }); } const token = jwt.sign({ id: existingUser._id }, process.env.JWT_SECRET_KEY, { expiresIn: "35s", }); console.log("Generated Token\n", token); if (req.cookies[`${existingUser._id}`]) { req.cookies[`${existingUser._id}`] = ""; } res.cookie(String(existingUser._id), token, { path: "/", expires: new Date(Date.now() + 1000 * 90), // 30 seconds httpOnly: true, sameSite: "lax", }); return res .status(200) .json({ message: "Successfully Logged In", user: existingUser, token }); }; const verifyToken = (req, res, next) => { const cookies = req.headers.cookie; const token = cookies.split("=")[1]; if (!token) { res.status(404).json({ message: "No token found" }); } jwt.verify(String(token), process.env.JWT_SECRET_KEY, (err, user) => { if (err) { return res.status(400).json({ message: "Invalid TOken" }); } console.log(user.id); req.id = user.id; }); next(); }; const getUser = async (req, res, next) => { const userId = req.id; let user; try { user = await User.findById(userId); } catch (err) { console.log(err); } // if (!user) { // return res.status(404).json({ message: "User not found" }); // } // return res.status(200).json({ message: user }); }; const refreshToken = (req, res, next) => { const cookies = req.headers.cookie; const prevToken = cookies.split("=")[1]; if (!prevToken) { return res.status(400).json({ message: "Couldn't find token" }); } jwt.verify(String(prevToken), process.env.JWT_SECRET_KEY, (err, user) => { if (err) { console.log(err); return res.status(403).json({ message: "Authentication failed" }); } res.clearCookie(`${user.id}`); req.cookies[`${user.id}`] = ""; const token = jwt.sign({ id: user.id }, process.env.JWT_SECRET_KEY, { expiresIn: "35s", }); console.log("Regenerated Token\n", token); res.cookie(String(user.id), token, { path: "/", expires: new Date(Date.now() + 1000 * 90), // 30 seconds httpOnly: true, sameSite: "lax", }); req.id = user.id; next(); }); }; const logout = (req, res, next) => { const cookies = req.headers.cookie; const prevToken = cookies.split("=")[1]; if (!prevToken) { return res.status(400).json({ message: "Couldn't find token" }); } jwt.verify(String(prevToken), process.env.JWT_SECRET_KEY, (err, user) => { if (err) { console.log(err); return res.status(403).json({ message: "Authentication failed" }); } res.clearCookie(`${user.id}`); req.cookies[`${user.id}`] = ""; return res.status(200).json({ message: "Successfully Logged Out" }); }); }; exports.logout = logout; exports.signup = signup; exports.login = login; exports.verifyToken = verifyToken; exports.getUser = getUser; exports.refreshToken = refreshToken;
Editor is loading...