DEV Community

Cover image for Authentication in Node.js with MongoDB, bcrypt, and JWT web Tokens with cookies 🍪.

Authentication in Node.js with MongoDB, bcrypt, and JWT web Tokens with cookies 🍪.

Ritesh Kumar on August 21, 2021

Adding authentication to an application is one of the most challenging 😖 but also a very important part for developers, but today I will teach you ...
Collapse
 
charlyjazz profile image
Carlos Azuaje •

JWT For session is a bad design.

Collapse
 
maswerdna profile image
Samson Andrew •

Don't do that. It's discouraging!

Next time, try to say kudos for the write-up, then suggest something better 🙂

Collapse
 
nyctonio profile image
Ritesh Kumar •

🥺 thank you

Collapse
 
nyctonio profile image
Ritesh Kumar • • Edited

No this is not a session based authorization it is a token based but what I did is stored that token in the cookie rather than sending them through the Authorization header for every HTTP request we can do in that way too but I thought that cookie one will be easier to understand for beginners.

Collapse
 
drsimplegraffiti profile image
DrSimple •

Nice post 👍👍...
I tend to use Express: app.use(express.json())

app.use(bodyparser.json()) outputs depreciation warnings here...just my preference though

Collapse
 
maswerdna profile image
Samson Andrew •

You're right.
The recommended way is to call the methods directly on the express object.

Because...
In the latest version of Express, some bodyParser's methods have been added natively. That's why you don't have to install or require bodyParser again.

Collapse
 
nyctonio profile image
Ritesh Kumar •

Yes you are right from now i will also use the same thanks for pointing it out 🤍

Collapse
 
maxinejs profile image
Maxine •

@icecoffee is this the answer ?!

Collapse
 
icecoffee profile image
Atulit Anand • • Edited

Here the author is talking about server side authentication.

Collapse
 
mthtanjim profile image
Tanjimul Hasan Tanjim •

Can you explain about ":" which used in password:plainTextPassword

Collapse
 
nyctonio profile image
Ritesh Kumar • • Edited

I am destructing req.body and storing password as plaintextpassword

image
you can understand this with this example

Collapse
 
mthtanjim profile image
Tanjimul Hasan Tanjim •

Thanks you so much, I understood well.

Collapse
 
artis3n profile image
Ari Kalfus •

Please take a look at auth0.com/blog/adding-salt-to-hash... to understand how to properly set a salt. A global value for your application is Not Good. The value does not need to be a secret, but it needs to be unique for every record you are hashing (unique per-password/user/record).

You typically store the salt with the hash either in a row in the same DB table or even prepended/appended to the hash with a delimeter. All that matters is the salt is unique per input.

From the Auth0 article:

A system-wide salt is pointless to mitigate attacks; it would just make passwords longer. A system-wide salt also easily allows an attacker to keep using hash tables. We should hash and salt each password created for a user. That is, we should generate a unique salt upon creation of each stored credential (not just per user or system-wide). That includes passwords created during registration or as the result of a password reset. If the user eventually cycles over the same password, we don't want to give away that the password has already been used.

Collapse
 
nyctonio profile image
Ritesh Kumar •

Thank you very much learned something new 🥰.

Collapse
 
artis3n profile image
Ari Kalfus •

Yeah!

Collapse
 
harshitaditya1 profile image
Harshit Aditya •

Amazing Blog Ritesh.

Collapse
 
nyctonio profile image
Ritesh Kumar •

Thanks harshit

Collapse
 
vyrru5 profile image
VyRru5 •

Why don’t use header authorization bearer in request ? Is the best practices

Collapse
 
nyctonio profile image
Ritesh Kumar • • Edited

Yes we can implement it in that way too which will also make it not vulnerable to CSRF but I thought that cookie one will be more beginner friendly 😬.

Collapse
 
solomonxuche profile image
Solomon Uche •

On the area where you encrypted the password, after destructuring request body, you recreated the password.
Which is supposed to produce an error identifier already exist because const variable cannot be recreated.

Collapse
 
nyctonio profile image
Ritesh Kumar •

Actually on destructuring the request body i am creating email and plaintextpassword and after that i created const password so there is no recreation 😇 thats why it didn't produced error.

Collapse
 
rishabh055 profile image
Rishabh Rathore •

Such a Awesome Explanation Dude keep it up🔥✌🏻

Collapse
 
nyctonio profile image
Ritesh Kumar • • Edited

Thanks Rishabh

Collapse
 
dhruv_arora profile image
Dhruv Arora •

You saved a life 🥺
I was stuck in this
Thank you brother ❤

Collapse
 
himanshu3651 profile image
Himanshu Singh •

Quite Awesome....!!

Collapse
 
harshitk816 profile image
Harshitk816 •

OMG! This literally made my work so easy-peasy😍. Thanks a lot for this!!! Looking forward to more posts like this💕

Collapse
 
jayantsankhi profile image
jayantsankhi •

Great work thanks for this article 👍😊

Collapse
 
lakshay1025 profile image
Lakshay1025 •

Amazing pal...Great Job

Collapse
 
crackingdemon profile image
crackingdemon •

No one has simple explanation than this post :) , worth spending time to read this , learned a lot :)