From 0bc27bb4027af5be6b172aa43265c79a5e3859a8 Mon Sep 17 00:00:00 2001 From: abdullah Bin Zubair <abdullahzubair85@gmail.com> Date: Tue, 31 Jan 2023 17:58:38 +0100 Subject: [PATCH] Create profile and fetch details --- config/default.json | 3 +- middleware/auth.js | 21 ++++++++++++++ models/User.js | 16 +++++++++++ routes/api/auth.js | 12 +++++++- routes/api/profile.js | 7 ----- routes/api/user.js | 66 +++++++++++++++++++++++++++++++++++++++++-- server.js | 5 ++-- 7 files changed, 117 insertions(+), 13 deletions(-) create mode 100644 middleware/auth.js delete mode 100644 routes/api/profile.js diff --git a/config/default.json b/config/default.json index 417984e..72a394d 100644 --- a/config/default.json +++ b/config/default.json @@ -1,3 +1,4 @@ { - "mongooURI":"mongodb+srv://abz282:abz282_@devconnector.oiepthu.mongodb.net/?retryWrites=true&w=majority" + "mongooURI":"mongodb+srv://abz282:abz282_@devconnector.oiepthu.mongodb.net/?retryWrites=true&w=majority", + "jwtSecret":"mysecret" } \ No newline at end of file diff --git a/middleware/auth.js b/middleware/auth.js new file mode 100644 index 0000000..5cfc239 --- /dev/null +++ b/middleware/auth.js @@ -0,0 +1,21 @@ +const jwt = require('jsonwebtoken'); +const config = require('config'); + +module.exports = function(req, res, next){ + + const token = req.header('x-auth-token'); + + + if (!token){ + return res.status(401).json({msg: 'No token, authorization denied'}); + } + + try{ + const decoded = jwt.verify(token, config.get('jwtSecret')); + + req.user = decoded.user; + next(); + }catch(err) { + res.status(401).json({msg: 'Token is not valid '}); + } +} \ No newline at end of file diff --git a/models/User.js b/models/User.js index 04cca20..f27d87e 100644 --- a/models/User.js +++ b/models/User.js @@ -9,6 +9,22 @@ const UserSchema = new mongoose.Schema({ type: String, required: true }, + password: { + type: String, + required: true + }, + university:{ + type: String, + required: true + }, + highestEducation: { + type: String, + required: true + }, + country: { + type: String, + required: true + }, date: { type: Date, default: Date.now diff --git a/routes/api/auth.js b/routes/api/auth.js index 107a630..bf9065e 100644 --- a/routes/api/auth.js +++ b/routes/api/auth.js @@ -1,7 +1,17 @@ const express = require('express'); const router = express.Router(); +const auth = require('../../middleware/auth'); +const User = require('../../models/User'); // route GET api/auth -router.get('/', (req, res) => res.send('Auth route')); +router.get('/', auth, async (req, res) => { + try{ + const user = await User.findById(req.user.id).select('-password'); + res.json(user); + } catch(err){ + console.log(err); + res.status(500).send('Server Error'); + } +}); module.exports = router; \ No newline at end of file diff --git a/routes/api/profile.js b/routes/api/profile.js deleted file mode 100644 index e668935..0000000 --- a/routes/api/profile.js +++ /dev/null @@ -1,7 +0,0 @@ -const express = require('express'); -const router = express.Router(); - -// route GET api/profile -router.get('/', (req, res) => res.send('Profile route')); - -module.exports = router; \ No newline at end of file diff --git a/routes/api/user.js b/routes/api/user.js index a635736..5a7e505 100644 --- a/routes/api/user.js +++ b/routes/api/user.js @@ -1,8 +1,70 @@ const express = require('express'); const router = express.Router(); +const bcrypt = require('bcryptjs'); +const jwt = require('jsonwebtoken'); +const config = require('config') +const {check, validationResult } = require('express-validator'); -// route GET api/users -router.get('/', (req, res) => res.send('User route')); +const User = require('../../models/User'); + + +// route POST api/users +router.post('/', [ + check('name', 'Name is required').not().isEmpty(), + check('email','Please enter a valid email').not().isEmpty(), + check('password','Enter a password with 5 or more characters').isLength({min:5}), + check('university', 'Enter univerity name').not().isEmpty(), + check('highestEducation', 'Enter highestEducation').not().isEmpty(), + check('country', 'Enter country').not().isEmpty(), + +], async (req, res) => { + const errors = validationResult(req); + if (!errors.isEmpty()){ + return res.status(400).json({ errors: errors.array()}); + } + const {name, email, password, university, + highestEducation, + country} = req.body; + + try{ + + let user = await User.findOne({email}); + if (user){ + res.send(400).json({error: [{msg: 'User already exist'}]}); + } + + user = new User({ + name, + email, + password, + university, + highestEducation, + country + }); + + const salt = await bcrypt.genSalt(10); + + user.password = await bcrypt.hash(password, salt); + await user.save(); + + const payload = { + user:{ + id: user.id + } + } + + jwt.sign(payload, config.get('jwtSecret'), {expiresIn:300000}, + (err, token) => { + if (err) throw err; + res.json(token); + } + ); + + }catch(err){ + console.error(err.message); + res.status(500).send('Server Error'); + } +}); module.exports = router; \ No newline at end of file diff --git a/server.js b/server.js index 3b4c2dc..33ce25e 100644 --- a/server.js +++ b/server.js @@ -7,9 +7,10 @@ connectDB(); app.get('/', (req, res) => res.send('Api Running')); -//Define Routes +app.use(express.json({extended : false})); + +//Defined Routes app.use('/api/users', require('./routes/api/user')); -app.use('/api/profile',require('./routes/api/profile')); app.use('/api/auth',require('./routes/api/auth')); const PORT = 5000; -- GitLab