Login RestFul API With JWT Auth Token In Node, Express JS, and MongoDB

 1. Index.js

const express = require('express');
const mongoose = require('mongoose');
const app = express();

mongoose.connect("mongodb://127.0.0.1:27017/ECOM")

//load routes
const user_route = require("./routes/userRoute")
app.use('/api',user_route)


app.listen('3000',()=>{
    console.log("Server Connected Successfully..")
})

2. Config.js


const config = {
    secret_key:"Thisisasecretkey."
}
module.exports = config;

3. Controllers

const User = require("../models/userModel");
const bcryptjs = require("bcryptjs");
const jwtkey = require("jsonwebtoken");
const config = require("../config/config");

const create_token = async (id) => {
  try {
    const token = await jwtkey.sign({ _id: id }, config.secret_key);
    return token;
  } catch (error) {
    res.status(400).send(error.message);
  }
};

const securePassword = async (password) => {
  try {
    const passwordhash = await bcryptjs.hash(password, 10);
    return passwordhash;
  } catch (error) {
    res.status(400).send(error.message);
  }
};

const register_user = async (req, res) => {
  try {
    const spassword = await securePassword(req.body.password);
    const user = new User({
      name: req.body.name,
      email: req.body.email,
      password: spassword,
      image: req.file.filename,
      mobile: req.body.mobile,
      type: req.body.type,
    });
    //Match E-mail ---
    const userData = await User.findOne({ email: req.body.email });
    if (userData) {
      res
        .status(200)
        .send({ success: false, msg: "The Email is already Exists" });
    } else {
      const userRegisterData = await user.save();
      res.status(200).send({ success: true, msg: userRegisterData });
    }
  } catch (error) {
    res.status(400).send(error.message);
  }
};

const user_login = async (req, res) => {
  //try{
  const email = req.body.email;
  const password = req.body.password;

  const userData = await User.findOne({ email: email });
  if (userData) {
    const passwordMatch = await bcryptjs.compare(password, userData.password);
    if (passwordMatch) {
      const tokenData = await create_token(userData._id);
      const userResult = {
        _id: userData._id,
        name: userData.name,
        email: userData.email,
        password: userData.password,
        image: userData.image,
        mobile: userData.mobile,
        type: userData.type,
        token: tokenData,
      };

      const response = {
        success: true,
        msg: "User Deatails",
        data: userResult,
      };

      res.status(200).send(response);
    } else {
      res
        .status(200)
        .send({ success: false, msg: "Login Details are incorrect.1" });
    }
  } else {
    res
      .status(200)
      .send({ success: false, msg: "Login Details are incorrect.2" });
  }

  // }catch(error){
  //    res.status(400).send(error.message)

  // }
};

module.exports = { register_user, user_login };

4.Routes

const express = require('express');
const user_route = express();

const bodyParser = require('body-parser');
user_route.use(bodyParser.json());
user_route.use(bodyParser.urlencoded({extended:true}));

const multer = require('multer');
const path = require('path');

user_route.use(express.static('public'));

const storage = multer.diskStorage({
    destination:function(req,file,cb){
        cb(null,path.join(__dirname,'../public/userImages'),function(error,success){
            if(error) throw error
        });
    },
    filename:function(req,file,cb){
       const name =  Date.now() +'-'+ file.originalname;
       cb(null, name , function(error1,success1){
        if(error1) throw error1
       })
    }

});

const upload = multer({storage:storage});

const userController = require("../controllers/userControllers");

user_route.post('/register',upload.single('image'),userController.register_user);
user_route.post('/login',userController.user_login);
module.exports = user_route;

5.Models


const mongoose = require('mongoose')

const userSchema = mongoose.Schema({
    name:{type:String,required:true,trim:true},
    email:{type:String,required:true},
    password:{type:String,required:true},
    image:{type:String,required:true},
    mobile:{type:Number,required:true},
    type:{type:Number,required:true}
})

module.exports = mongoose.model("User",userSchema)


Comments

Popular posts from this blog

My Sql Query ..

Interview question laravel.