//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