From 05f81df826fbf2665bc9842258b0991c377538a3 Mon Sep 17 00:00:00 2001 From: emmydame Date: Wed, 17 Jun 2020 18:56:23 +0100 Subject: [PATCH 1/4] feat:updated contributor list --- contributors.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/contributors.txt b/contributors.txt index b800f3f0..556db588 100644 --- a/contributors.txt +++ b/contributors.txt @@ -74,6 +74,7 @@ Jibola Bakare ~ slack username: @everybees 37. Andeh Ebele -@jandeh 38. Oluwaseun Abiola, @Oluwaseun 39. Jude Biose @Jude. +40. Emilia Anochirionye @Emmy Peter Israel-Ovirih, @PeterIsrael Amanam Sandy @Amanie Abdulazeez Shittu @abdulazeez.shittu From 0ca8ba87b945b43dd310d0efc79c4229a13c2e9c Mon Sep 17 00:00:00 2001 From: emmydame Date: Sat, 20 Jun 2020 08:14:24 +0100 Subject: [PATCH 2/4] feat: Added register route --- src/index.js | 3 +++ src/routes/register.js | 6 ++++++ 2 files changed, 9 insertions(+) create mode 100644 src/routes/register.js diff --git a/src/index.js b/src/index.js index 59bdd73b..b1c29b9b 100644 --- a/src/index.js +++ b/src/index.js @@ -4,6 +4,7 @@ const cors = require('cors'); const PORT = process.env.PORT || 5000; const authRoute = require('./routes/auth'); +const registerRoute= require('./routes/register'); const app = express(); @@ -15,6 +16,8 @@ app.use(express.urlencoded({ app.use('/api/auth', authRoute); +app.use('/api/register', registerRoute); + app.get('/', (req, res) => { res.json({ massage: "Wellcome micro-auth-api" diff --git a/src/routes/register.js b/src/routes/register.js new file mode 100644 index 00000000..774e41a7 --- /dev/null +++ b/src/routes/register.js @@ -0,0 +1,6 @@ +const jwt = require("jsonwebtoken"); +const bcrypt = require("bcryptjs"); +const secret = "serete"; +const db = require("../config/db.config"); + +const User = db.user; \ No newline at end of file From 219a74a6a84a291c688ec148ad85127d008926ec Mon Sep 17 00:00:00 2001 From: emmydame Date: Sun, 21 Jun 2020 04:14:05 +0100 Subject: [PATCH 3/4] fix: prettier fixes --- src/controllers/auth.js | 116 ++++++++++++++++++---------------------- 1 file changed, 52 insertions(+), 64 deletions(-) diff --git a/src/controllers/auth.js b/src/controllers/auth.js index 6c34e8a6..3be2bb72 100644 --- a/src/controllers/auth.js +++ b/src/controllers/auth.js @@ -1,30 +1,25 @@ -const User = require('../models/User'); +/* eslint-disable prettier/prettier */ +/* eslint-disable no-unused-vars */ +const User = require("../models/User"); const asyncHandler = require("../middleware/async"); -const ErrorResponse = require('../utils/errorResponse'); +const ErrorResponse = require("../utils/errorResponse"); -const { - protect -} = require("../middleware/auth"); +const { protect } = require("../middleware/auth"); //@Desc register //@route Post /api/v1/auth/register //@access Public exports.register = asyncHandler(async (req, res, next) => { - const { - name, - email, - password, - role - } = req.body; + const { name, email, password, role } = req.body; - const user = await User.create({ - name, - email, - password, - role - }); + const user = await User.create({ + name, + email, + password, + role, + }); - sendTokenResponse(user, 200, res); + sendTokenResponse(user, 200, res); }); //@Desc login @@ -32,59 +27,52 @@ exports.register = asyncHandler(async (req, res, next) => { //@access Public exports.login = asyncHandler(async (req, res, next) => { - const { - email, - password - } = req.body; - - if (!email && !password) { - return next(new ErrorResponse("Please provide an email and password", 400)); - } - //FInd user in DB - const user = await User.findOne({ - email: email - }).select('+password'); - - if (!user) { - return next(new ErrorResponse("Invalid credentials", 401)); - } - //Compare Password - const isMatch = await user.matchPasswords(password); - - if (!isMatch) { - return next(new ErrorResponse("Invalid Credentials", 401)); - } - - sendTokenResponse(user, 200, res); + const { email, password } = req.body; + + if (!email && !password) { + return next(new ErrorResponse("Please provide an email and password", 400)); + } + //FInd user in DB + const user = await User.findOne({ + email: email, + }).select("+password"); + + if (!user) { + return next(new ErrorResponse("Invalid credentials", 401)); + } + //Compare Password + const isMatch = await user.matchPasswords(password); + + if (!isMatch) { + return next(new ErrorResponse("Invalid Credentials", 401)); + } + + sendTokenResponse(user, 200, res); }); const sendTokenResponse = (user, statusCode, res) => { - const token = user.getSignedJwtToken(); - const options = { - expires: new Date(Date.now() + process.env.JWT_COOKIE_EXPIRE * 24 * 60 * 60 * 1000), - httpOnly: true - } - res - .status(statusCode) - .cookie("token", token, options) - .json({ - success: true, - token - - }) - -} + const token = user.getSignedJwtToken(); + const options = { + expires: new Date( + Date.now() + process.env.JWT_COOKIE_EXPIRE * 24 * 60 * 60 * 1000 + ), + httpOnly: true, + }; + res.status(statusCode).cookie("token", token, options).json({ + success: true, + token, + }); +}; //@Desc getuser //@route Post /api/v1/auth/getuser //@access Public -exports.getUser = asyncHandler( async (req, res, next ) => { - const user = await User.findById(req.user.id); +exports.getUser = asyncHandler(async (req, res, next) => { + const user = await User.findById(req.user.id); - res.status(200).json({ - success: true, - data: user - }); + res.status(200).json({ + success: true, + data: user, + }); }); - From 90f264503cfe65c68735d6e8320a8e60cd42f4fb Mon Sep 17 00:00:00 2001 From: emmydame Date: Sun, 21 Jun 2020 07:23:07 +0100 Subject: [PATCH 4/4] feat: Added user validation on register route --- config/default.js | 1 + src/Middleware/auth.js | 1 + src/controllers/auth.js | 25 +++++++++++++++++++++---- src/routes/auth.js | 3 ++- src/routes/register.js | 6 ------ src/server.js | 5 +++-- 6 files changed, 28 insertions(+), 13 deletions(-) delete mode 100644 src/routes/register.js diff --git a/config/default.js b/config/default.js index bb3f44d0..9a416dcf 100644 --- a/config/default.js +++ b/config/default.js @@ -1,3 +1,4 @@ +/* eslint-disable prettier/prettier */ require("custom-env").env(); // parse DATABASE_URL if set in environment diff --git a/src/Middleware/auth.js b/src/Middleware/auth.js index 26e154fa..bf95d945 100644 --- a/src/Middleware/auth.js +++ b/src/Middleware/auth.js @@ -1,3 +1,4 @@ +/* eslint-disable prettier/prettier */ const jwt = require("jsonwebtoken"); const asyncHandler = require("./async"); const errorResponse = require("../utils/errorResponse"); diff --git a/src/controllers/auth.js b/src/controllers/auth.js index 8d656dd6..9853d93a 100644 --- a/src/controllers/auth.js +++ b/src/controllers/auth.js @@ -12,14 +12,31 @@ const { protect } = require("../middleware/auth"); exports.register = asyncHandler(async (req, res, next) => { const { name, email, password, role } = req.body; - const user = await User.create({ + if (!email && !password && !role) { + return next(new ErrorResponse("Mandatory fields missing", 400)); + } + //check if user exist + const user = await User.findOne({ + email: email, + }).select("+password"); + + if (user) { + return next(new ErrorResponse("User Already exist", 401)); + } + + const newuser = await User.create({ name, email, password, role, - }); - - sendTokenResponse(user, 200, res); + }, (err)=>{ + if(err) { + return next(new ErrorResponse("Registration not completed", 400)); + } + + sendTokenResponse(newuser, 200, res); + + }); }); //@Desc login diff --git a/src/routes/auth.js b/src/routes/auth.js index 54bbc690..8850af81 100644 --- a/src/routes/auth.js +++ b/src/routes/auth.js @@ -1,5 +1,6 @@ +/* eslint-disable prettier/prettier */ const router = require('express').Router(); -const express = require("express"); + const { protect } = require("../middleware/auth"); diff --git a/src/routes/register.js b/src/routes/register.js deleted file mode 100644 index 774e41a7..00000000 --- a/src/routes/register.js +++ /dev/null @@ -1,6 +0,0 @@ -const jwt = require("jsonwebtoken"); -const bcrypt = require("bcryptjs"); -const secret = "serete"; -const db = require("../config/db.config"); - -const User = db.user; \ No newline at end of file diff --git a/src/server.js b/src/server.js index 5649ebb7..53b98e87 100644 --- a/src/server.js +++ b/src/server.js @@ -1,10 +1,11 @@ +/* eslint-disable prettier/prettier */ require('dotenv').config(); const express = require('express'); const cors = require('cors'); const PORT = process.env.PORT || 5000; const connectDB = require("./controllers/index"); const authRoute = require('./routes/auth'); -const registerRoute= require('./routes/register'); + const app = express(); @@ -19,7 +20,7 @@ app.use(express.urlencoded({ app.use('/api/v1/auth', authRoute); -app.use('/api/register', registerRoute); + app.get('/', (req, res) => { res.json({