//middleware --> auth const jwt = require('jsonwebtoken'); function Auth (req, res, next) { const token = req.session.token || req.cookies.token; if (!token) { return res.status(401).send({ error: 'Unauthorized' }); } try { const payload = jwt.verify(token, "JWT_SECRET"); req.user = payload; next(); } catch (error) { res.status(401).send({ error: 'Unauthorized' }); } } module.exports = Auth; --> model --> user.js const mongoose = require('mongoose'); const bcrypt = require('bcrypt'); const userSchema = new mongoose.Schema({ username: { type: 'String' }, password:{ type: 'String' } }); userSchema.pre('save',async function (next){ if(this.isModified('password')){ this.password = await bcrypt.hash(this.password, 10); } next(); }) const userModel = mongoose.model('User', userSchema); module.exports = userModel; -->router --> user.js var express = require('express'); var router = express.Router(); var userModel = require('../model/user'); const auth = require('../middleware/auth'); const jwt = require('jsonwebtoken'); const bcrypt = require('bcrypt'); /* GET users listing. */ const CreateUser = async (req,res,next) => { try { const createUser = new userModel({ username: req.body.username, password: req.body.password }) const saveData = await createUser.save(); res.status(200).json({ status: 'success', saveData }) } catch (error) { res.status(500).json({ status: 'error', error }) } } const CheckUser = async (req,res,next) => { try { const {username , password } = req.body const findUser = await userModel.findOne({ username : username}) if(findUser){ bcrypt.compare(password, findUser.password, function(err, result) { // result == true if (result == true) { console.log(findUser); const token = jwt.sign({ _id: findUser._id }, "JWT_SECRET", { expiresIn: '1h' }); res.cookie('token', token, { httpOnly: true }); req.session.user = findUser; res.status(200).json({ status: 'Login success', token }) }else { res.status(500).json({ status: 'Password Incorrect', }) } }); }else{ res.status(500).json({ status: 'User not Found', }) } } catch (error) { res.status(500).json({ status: 'error', error }) } } const GetUser = async (req,res,next) => { try { const page = parseInt(req.query.page); const limit = parseInt(req.query.limit) || 10; const skip = (page - 1) * limit; const findUser = await userModel.find().skip(skip).limit(limit); const userToken = req.cookies.token; const user = req.session.user; console.log("🚀 ~ GetUser ~ user:", user) console.log(user); res.status(200).json({ status: 'Login success', findUser, userToken, user }) } catch (error) { res.status(500).json({ status: 'error', error }) } } const logoutUser = async (req,res,next) => { try { res.clearCookie('token'); res.send({ message: 'Logged out successfully' }); } catch (error) { res.status(500).json({ status: 'error', error }) } } router.post('/signin', CreateUser); router.post('/logIn', CheckUser); router.get('/getUser',auth, GetUser); router.get('/logout',auth, logoutUser); module.exports = router;
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter