I am doing the following thing in node js
1.register and save user in mongodb 2.generate token when registered. 3.authorization using token 4.login user and
this is my router file
JavaScript
x
140
140
1
const express = require('express');
2
const router = express.Router();
3
const User = require('../models/user');
4
const bcrypt= require('bcryptjs');
5
const use_jwt = require('../middleware/use_jwt.js')
6
const jwt = require('jsonwebtoken');
7
const user = require('../models/user');
8
//const user = require('../models/user');
9
const env = require ('dotenv').config();
10
router.get('/',use_jwt , async(req,res,next)=>{
11
try{
12
const user_id = req.user.id;
13
const user2 = await User.findById(user_id).select('-password');
14
res.status(200).json({
15
success:true,
16
user:user2
17
})
18
19
}
20
catch(err){
21
console.log(err);
22
res.status(401).json({
23
msg:"server not responding"
24
25
})
26
27
}
28
next();
29
})
30
31
32
33
router.post('/register',async(req,res,next)=>{
34
const {username,email,password}=req.body;
35
try{
36
let user_exist = await User.findOne({email:email});
37
if(user_exist){
38
return res.status(401).json({
39
"success":"false",
40
"msg":"user already exist"
41
})
42
}
43
//importing data to models
44
const users = new User();
45
users.username = username;
46
users.email = email ;
47
console.log(users.email);
48
console.log(password)
49
const salt = await bcrypt.genSalt(10);
50
users.avatar = "https://gravatar.com/avatar/?s=200&d=retro"
51
users.password = await bcrypt.hash(password,salt)
52
53
console.log(users.password);
54
console.log("hello");
55
await users.save();
56
const payload = {
57
user :{
58
id:users.id
59
}
60
}
61
console.log(payload.user.id);
62
jwt.sign(payload,process.env.jwtUsersecret,{
63
expiresIn : 3600000
64
},(err,token)=>{
65
if(err) throw err;
66
else {
67
res.status(200).json({
68
success:true,
69
token:token
70
})
71
}
72
})
73
next();
74
}
75
catch(err){
76
console.log(err);
77
}
78
});
79
80
router.post('/login',async (req,res,next)=>{
81
const email = req.body.email
82
const password = req.body.password
83
console.log('hello2')
84
console.log(password)
85
console.log('hello1')
86
87
try{
88
const user_exist = User.findOne({email:email})
89
90
if(!user_exist){
91
console.log('one user tried to login without registering')
92
res.status(400).json({
93
"msg":"pls register and then try to login because there is no such user",
94
"sucess":"false"
95
96
})
97
98
}
99
100
//console.log(user)
101
102
103
bcrypt.compare(password, users.password, (err, res) => {
104
if (err) throw err;
105
if (res) {(req,res)=>{
106
const payload = {
107
user: {
108
id: users.id
109
}
110
}
111
console.log(payload.user.id);
112
token = jwt.sign(payload,process.env.jwtUsersecret)
113
res.status(200).json({
114
"sucess": "true",
115
"user": user,
116
"email": email,
117
"token": token
118
});
119
}
120
}
121
else {
122
res.json({
123
"success": "false",
124
"msg": "password incorrect"
125
});
126
}
127
128
})
129
}
130
131
catch(err){
132
console.log(err);
133
res.status(400).json({
134
"msg":"server not responding"
135
136
})
137
}
138
})
139
module.exports = router;
140
but when i give post request . It says users is not defined at
JavaScript
1
2
1
bcrypt.compare(password,users.password)
2
pls find an solution for this . I am sorry if it is a silly or bad question . thanks
Advertisement
Answer
You didn’t identify “Users” so you can chick as:
JavaScript
1
17
17
1
User.findOne({email: email}, (err, user)
2
> {
3
> if(err) throw err;
4
> if(!user){
5
> console.log("User dose not exisit")
6
> }
7
> bcrypt.compare(password, user.password , (err, result) => {
8
> if (err) throw err;
9
> if (result === true) {
10
> //User Is Found and password match
11
> } else {
12
> //User Password dose not match
13
> }
14
> });
15
>
16
> })
17
//It will store found user and chick if user email existed if yes it will chick password
I hope that helps 😊