Aneeqa Khan
Posted on • Updated on
#node #javascript #beginners #tutorial
Table of Contents
- Introduction
- Install Dependencies
- Generate JWT Token
- Register User
- Authenticate User
For this series, I'm following an excellent video tutorial from Traversy Media
Introduction
To get started with user registration and authentication, we'll begin by installing the necessary dependencies. Specifically, we'll use the bcryptjs
library to securely store user passwords as hashes, and the jsonwebtoken
library to generate JSON Web Tokens (JWT) for user authentication.
Install Dependencies
Firstly, let's install the required libraries:
npm i bcryptjsnpm i jsonwebtoken
Generate JWT Token
In this step, we are creating a function to generate a JWT token to use later. Write this function in userController.js
file.
const jwt = require("jsonwebtoken");const bcrypt = require("bcryptjs");const asyncHandler = require("express-async-handler");const User = require("../models/userModel");// Generate JWTconst generateToken = (id) => { return jwt.sign({ id }, process.env.JWT_SECRET, { expiresIn: "30d" });};
Don't forget to initialize the JWT_SECRET
variable in your .env
file. You can choose any suitable value for it.
Register User
Now, we'll write down the logic for registering a user in userController.js
file.
const registerUser = asyncHandler(async (req, res) => { const { name, email, password } = req.body; if (!name || !email || !password) { res.status(400); throw new Error("Please add all fields"); } // check if user exists const userExists = await User.findOne({ email }); if (userExists) { res.status(400); throw new Error("User already exists"); } // create hash password const salt = await bcrypt.genSalt(10); const hashedPassword = await bcrypt.hash(password, salt); // create user const user = await User.create({ name, email, password: hashedPassword, }); if (user) { res.status(201).json({ _id: user.id, name: user.name, email: user.email, token: generateToken(user._id), }); } else { res.status(400); throw new Error("Invalid user data"); }});
Let's test the registration process using Postman and ensure everything works as expected.
And it'll show an error if you try to add the same user again.
Authenticate User
To enable authentication for a registered user, we will implement a 'Login User' function within the userController
file, which will involve verifying the user's identity by comparing their provided email and password.
const loginUser = asyncHandler(async (req, res) => { const { email, password } = req.body; if (!email || !password) { res.status(400); throw new Error("Please add all fields"); } // Check for user email const user = await User.findOne({ email }); if (user && (await bcrypt.compare(password, user.password))) { res.json({ _id: user.id, name: user.name, email: user.email, token: generateToken(user._id), }); } else { res.status(400); throw new Error("Invalid credentials"); }});
Let's test the login process with correct and incorrect credentials.
In the next article, we'll work on Authentication Middleware and also create a new API to get logged-in user data.
Connect with me
Top comments (7)
Subscribe
Nazim Boudeffa
Nazim Boudeffa
Hi, I am a coder and a dudeist, excuse my english I am a french speaker that maintain a certain international english level
-
Joined
• Nov 14 '23
- Copy link
Thank you for sharing this is what I am goign to use for my project
Do you know how to add a middleware to routes ?
Aneeqa Khan
Aneeqa Khan
Software Engineer by profession, Artist by heart
-
Email
aneeqa.k25@gmail.com
-
Location
London, United Kingdom
-
Education
MCS
-
Pronouns
she/her
-
Work
Finding work
-
Joined
• Nov 14 '23
- Copy link
I'm glad that it is helpful for you.
I am going to write about middleware in my next blog but you can also check this video.
Nazim Boudeffa
Nazim Boudeffa
Hi, I am a coder and a dudeist, excuse my english I am a french speaker that maintain a certain international english level
-
Joined
• Nov 14 '23 • Edited on Nov 14 • Edited
- Copy link
Thank you very much for the video link it was helpful because I was stuck on how to use the token
I know Traversy Media from Packt Publishing site, Brad is a very good tutor
So I have been able to finish a first version of a project API
You can find it on my GitHub
I am thinking about writing a tutorial on how I am coding it, it was inspired by Medusajs early versions
Aneeqa Khan
Aneeqa Khan
Software Engineer by profession, Artist by heart
-
Email
aneeqa.k25@gmail.com
-
Location
London, United Kingdom
-
Education
MCS
-
Pronouns
she/her
-
Work
Finding work
-
Joined
• Nov 14 '23
- Copy link
Certainly, it's a great idea to explore that topic in writing.
Hasan Elsherbiny
Hasan Elsherbiny
Senior Full-stack .Net Developer who has Created and optimized scalable web applications for over 8 years ,leveraged troubleshooting anddebugging expertise to contribute to the successful development
-
Education
Bachelor of Physics and Computer Science
-
Work
Senior Full stack Developer
-
Joined
• Nov 11 '23
- Copy link
good job 👏👏
Samir
Samir
Keep moving forward
-
Location
Ghana
-
Education
UNIVERSITY OF CAPE COAST
-
Pronouns
Him
-
Work
Student
-
Joined
• Apr 28
- Copy link
What database do you use
Aneeqa Khan
Aneeqa Khan
Software Engineer by profession, Artist by heart
-
Email
aneeqa.k25@gmail.com
-
Location
London, United Kingdom
-
Education
MCS
-
Pronouns
she/her
-
Work
Finding work
-
Joined
• Apr 28
- Copy link
For this series, I used MongoDB.
For further actions, you may consider blocking this person and/or reporting abuse