Preview:
var jwt = require('jsonwebtoken');
const userModel = require('../model/user');

function Auth (req, res, next) {

    const getUserCookies = req.cookies.userData;

    if(!getUserCookies){
        res.status(200).json({message: 'Login First'})
    }

    jwt.verify(getUserCookies.token, 'shhhhh', async function(err, decoded) {
        req.user = await userModel.findById(decoded._id);
        if (!req.user) {
            return res.status(401).json({ error: 'Invalid token. User not found.' });
          }
        next() // bar
    });
}

module.exports = Auth;


const mongoose = require('mongoose');

const userSchema = new mongoose.Schema({
   
    email:{
        type: 'string',
        required: true
    },
    password:{
        type: 'string',
        required: true
    }

  });

  const userModel = mongoose.model('User', userSchema);

  module.exports = userModel;


var express = require('express');
var router = express.Router();
const userModel = require('../model/user');
var jwt = require('jsonwebtoken');
const Auth = require('../middleware/Auth');

/* GET users listing. */
router.get('/', function(req, res, next) {
  res.send('respond with a resource');
});

const createUser = async (req,res,nexr) => {

  try {
    
    const userDatasave = new userModel({
      email: req.body.email,
      password: req.body.password
    })

    const saveUser = await userDatasave.save();

    res.status(200).json({
      status: 'success',
      saveUser: saveUser
    })

  } catch (error) {

    console.log(error.message);

    res.status(500).json({
      status: 'Server Error',
    })
    
  }

}

const checkUser = async (req,res,nexr) => {

  try {
    
    const {email, password} = req.body;
    const findUser = await userModel.findOne({email})

    if(findUser){

      if(findUser.password === password){

        var token = jwt.sign({ _id: findUser._id }, 'shhhhh', { expiresIn: '1h'});
        res.cookie('userData',{...findUser,token},{httpOnly: true});
        res.status(200).json({
          status: 'login successful',
          token
        })

      }else{

        res.status(200).json({
          status: 'Wrong Password',
        })

      }

    }else{

      res.status(200).json({
        status: 'User not Found',
      })

    }

  } catch (error) {

    console.log(error.message);

    res.status(500).json({
      status: 'Server Error',
    })
    
  }

}

const getAllUser = async (req,res,nexr) => {

  try {
    const findUser = await userModel.find({})

    res.status(200).json({
      status: 'success',
      findUser: findUser
    })

  } catch (error) {

    console.log(error.message);

    res.status(500).json({
      status: 'Server Error',
    })
    
  }

}

const userLogout = async (req,res,nexr) => {

  try {
    res.clearCookie('userData');

    res.status(200).json({
      status: 'user logged out successfully',
    })

  } catch (error) {

    console.log(error.message);

    res.status(500).json({
      status: 'Server Error',
    })
    
  }

}


router.post('/saveuser',createUser);
router.post('/loginuser',checkUser);
router.get('/getuser',Auth,getAllUser);
router.get('/logout',Auth,userLogout);


module.exports = router;


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