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
Post a Comment