This repository was archived by the owner on Dec 13, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathusers.js
96 lines (82 loc) · 2.06 KB
/
users.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
const express = require('express');
const router = express.Router();
const gravatar = require('gravatar');
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');
const { check, validationResult } = require('express-validator');
const normalize = require('normalize-url');
const dotenv = require('dotenv');
dotenv.config();
const User = require('../../models/User');
// @route POST api/users
// @desc Register user
// @access Public
router.post(
'/',
check('name', 'Name is required').notEmpty(),
check('email', 'Please include a valid email').isEmail(),
check(
'password',
'Please enter a password with 6 or more characters',
).isLength({ min: 6 }),
async (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
const { name, email, password } = req.body;
//@desc: Creating user using register route
//@input: name, email, password
//@output: JWT token for user (with expiry)
try {
// Checking if user already exists
let user = await User.findOne({ email });
if (user) {
return res
.status(400)
.json({ errors: [{ msg: 'User already exists' }] });
}
// Getting user's gravatar from email id
const avatar = normalize(
gravatar.url(email, {
s: '200',
r: 'pg',
d: 'mm',
}),
{ forceHttps: true },
);
// Creating user object
user = new User({
name,
email,
avatar,
password,
});
// Creating the secret key for the JWT
const salt = await bcrypt.genSalt(10);
// Hashing the password
user.password = await bcrypt.hash(password, salt);
// Saving the user
await user.save();
const payload = {
user: {
id: user.id,
},
};
// Creating the JWT token
jwt.sign(
payload,
process.env.JWT_SECRET,
{ expiresIn: '5 days' },
(err, token) => {
if (err) throw err;
res.json({ token });
},
);
} catch (err) {
console.error(err.message);
res.status(500).send('Server error');
}
},
);
module.exports = router;