From 43267ef2872f323c3deb9ffd48b813a6ad4bdee1 Mon Sep 17 00:00:00 2001 From: Meet Shah Date: Thu, 9 Feb 2023 10:42:24 +0530 Subject: [PATCH] created api for registration and for login with token --- backend/index.js | 8 +++++ backend/routes/login.js | 54 ++++++++++++++++++++++++++++++++++ backend/routes/registration.js | 53 +++++++++++++++++++++++++++++++++ 3 files changed, 115 insertions(+) create mode 100644 backend/routes/login.js diff --git a/backend/index.js b/backend/index.js index 82953b6..61f0871 100644 --- a/backend/index.js +++ b/backend/index.js @@ -3,9 +3,14 @@ const mongoose = require("mongoose"); const app = express(); const user = require('./models/User'); const contact = require('./models/Contact'); +const registrationRoute = require('./routes/registration') +const loginRoute = require('./routes/login'); const bcrypt = require("bcrypt"); +const jwt = require('jsonwebtoken'); +const cors = require("cors"); const port = 8086; app.use(express.json()); +app.use(cors()); const url = `mongodb+srv://admin:admin@cluster0.kzqiv0i.mongodb.net/?retryWrites=true&w=majority` @@ -17,4 +22,7 @@ mongoose.connect(url, (err)=>{ } }) +app.use('/api', registrationRoute); +app.use('/api', loginRoute); + app.listen(port, () => console.log(`App listening to port ${port}`)) \ No newline at end of file diff --git a/backend/routes/login.js b/backend/routes/login.js new file mode 100644 index 0000000..8a8eba7 --- /dev/null +++ b/backend/routes/login.js @@ -0,0 +1,54 @@ +const express = require("express"); +const router = express.Router(); +const user = require('../models/User'); +const bcrypt = require("bcrypt"); +const jwt = require("jsonwebtoken"); +const secret = 'RESTAPI' + +router.post('/login', async (req, res)=>{ + try{ + console.log(req.body); + const { email, password } = req.body; + const user_obj = await user.findOne({ email }); + if(!user_obj){ + return res.status(400).json({ + status: "Failed", + message: "User not registered" + }) + } + bcrypt.compare(password, user_obj.password, (err, result)=>{ + if(err){ + return res.status(400).json({ + status:"Failed", + message:err.message + }) + } + if(result){ + const token = jwt.sign({ + exp: Math.floor(Date.now() / 1000) + (60 * 60), + data: user_obj._id + }, secret); + + return res.json({ + status:"Success", + message:"Login Successful", + token + }) + }else{ + return res.status(400).json({ + status:"Failed", + message:"Invalid credentials" + }) + } + }) + + } catch(e){ + return res.status(500).json({ + status:"Failed", + message:e.message + }) + } +}) + + +module.exports = router \ No newline at end of file diff --git a/backend/routes/registration.js b/backend/routes/registration.js index e69de29..b2e036f 100644 --- a/backend/routes/registration.js +++ b/backend/routes/registration.js @@ -0,0 +1,53 @@ +const express = require("express"); +const router = express.Router(); +const user = require('../models/User'); +const bcrypt = require("bcrypt"); +const jwt = require("jsonwebtoken"); +const secret = 'RESTAPI' + +router.get('/register', (req, res)=>{ + res.send("Welcome to Registration"); +}) + +router.post('/register', async (req, res) => { + try { + console.log(req.body); + const { email, password } = req.body; + const user_obj = await user.findOne({ email }); + if (user_obj) { + return res.status(409).json({ + status: "Failed", + message: "User already exist" + }); `` + } + bcrypt.hash(password, 10, async (err, hash) => { + if (err) { + return res.status(500).json({ + status: "Failed", + message: err.message + }) + } + const data = await user.create({ + email, + password: hash + }); + res.json({ + status: "success", + message: "Registration Successful", + data + }) + }) + } catch(e){ + res.status(500).json({ + status:"Failed", + message:e.message + }) + } + + +}) + + + + +module.exports = router \ No newline at end of file