SIGNUP BY CREATING A TOKEN USING JWT FOR AUTHENTICATION

HERE WE CREATE A SIGNUP ROUTE , SUCH THAT WHEN SIGNED IN A TOKEN IS GENERATED WHICH IS LATER USED FOR USER AUTHENTICATION.

HERE , WE USE THE MVC STRUCTURE ( MODELS , VIEWS, CONTROLLERS) 

WE HAVE ALREADY CREATED THE USER MODEL IN MODELS FOLDER. NOW WE WILL CREATE A ROUTES FOLDER , IN WHICH ALL THE ROUTES ARE CREATED.

IN APP.JS

const cookieParser = require("cookie-parser");
const userRouter = require("./src/Routes/userRouter");
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

app.use("/", userRouter);


USERROUTER.JS

const router = require("express").Router();
const { signup } = require("../controllers/userController");

router.post("/signup", signup);
module.exports = router;

THE HASHING PROCESS OF PASSWORD IS EXECUTED IN USER MODEL

const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const Model = mongoose.model;
const bcrypt = require("bcryptjs");
const userSchema = new Schema({
  name: {
    type: String,
    required: true,
  },
  username: {
    type: String,
    required: true,
    unique: true,
  },
  email: {
    type: String,
    required: true,
    unique: true,
  },
  password: {
    type: String,
    required: true,
  },
});

userSchema.pre("save", async function () {
  this.password =await bcrypt.hash(this.password, 10);
});
const User = new Model("User", userSchema);
module.exports = User;


USERCONTROLLER.JS

  HERE, WE USED A PACKAGE HTTP-STATUS THAT BASICALLY PROVIDES STATUS CODES BY WRITING THE VALUE

LIKE IF WE WRITE STATUS.FOUND IT WOULD AUTOMATICALLY ASSIGN THE STATUS CODES

const user = require("../models/userModel");
const { status } = require("http-status");
const { createSecretToken } = require("../utils/secretToken");

module.exports.signup = async (req, res) => {
  const { name, username, password, email } = req.body;
  if (!name || !username || !password || !email) {
    return res.status(404).json({ message: "Every field is required!" });
  }
  try {
    const existingUser = await user.findOne({ username });
    if (existingUser) {
      return res.status(status.FOUND).json({ message: "user already exists!" });
    }
    const newUser = new user({
      name,
      username,
      password,
      email,
    });
    await newUser.save();
    const token = createSecretToken(user._id);
    res.cookie("token", token, {
        withCredentials: true,
        httpOnly: false,
      });
    return res
      .status(status.CREATED)
      .json({ message: "User signed in successfully" });
  } catch (e) {
    return res.status(400).json({ message: `something went wrong ${e}` });
  }
};


SECRETTOKEN.JS

require("dotenv").config();
const jwt = require("jsonwebtoken");

module.exports.createSecretToken = (id) => {
  return jwt.sign({ id }, process.env.TOKEN_KEY, {
    expiresIn: 3 * 24 * 60 * 60,
  });
};

 







Comments