Skip to content
Snippets Groups Projects
Commit b6f4ca1c authored by alrwasheda's avatar alrwasheda :speech_balloon:
Browse files

Token returned as object. Queries reduced. "await" instead of nested "then()"

parent 49d72cc3
No related branches found
No related tags found
No related merge requests found
......@@ -2,9 +2,9 @@ import bcryptServices from "./db/bcryptFunctions";
import getTokenPayload from "./db/jwtTokenPayload";
import jwt from "jsonwebtoken";
import Worker from "./db/models/Worker";
import {Request,Response} from "express"
import { Request, Response } from "express";
const authLoginController = async (req:Request, res:Response) => {
const authLoginController = async (req: Request, res: Response) => {
try {
//destructure req.body: -------------------------------
const loginData = {
......@@ -12,43 +12,45 @@ const authLoginController = async (req:Request, res:Response) => {
password: req.body.password,
};
//check email: -------------------------------
const workerExists = await Worker.findByPk(loginData.email); //get worker according to PrimaryKey Email from DB
if (!workerExists) {
// if worker does not exist
//get password of worker (if found, using given email)
const getPasswordIfWorkerExists = await Worker.findAll({
attributes: ["password"],
where: {
email: loginData.email,
},
});
//if not found -> email incorrect or worker not found
if (getPasswordIfWorkerExists.length === 0) {
return res.status(401).send("wrong email or email not found!");
}
//check password: -------------------------------
await Worker.findOne({
where: {
email: loginData.email,
},
attributes: ["password"],
}).then((result) => {
const hashedPasswordInDB = result.password; //password in DB
bcryptServices
.comparePassword(loginData.password, hashedPasswordInDB)
.then((result) => {
if (result) {
//if password is right -> create jwt-token
getTokenPayload(loginData.email).then((result) => {
const tokenPayload = {
email: result[0].email,
password: result[0].password,
role: result[0].role,
};
//give token: -------------------------------
const token = jwt.sign(tokenPayload, process.env.JWT_SECRET);
// console.log("token:", token);
return res.status(200).send(`logged in successfully!\nToken: ${token}`);
})
} else return res.status(401).send("invalid password!");
//otherwise: if worker found
//check given password: -------------------------------
const hashedPasswordInDB = getPasswordIfWorkerExists[0].password; //password in DB
const compareResult = await bcryptServices.comparePassword(
loginData.password,
hashedPasswordInDB
);
});
});
//if password is right -> create jwt-token
if (compareResult) {
const tokenPayload = await getTokenPayload(loginData.email);
const payload = {
email: tokenPayload[0].email,
password: tokenPayload[0].password,
role: tokenPayload[0].role,
};
//create and send token: -------------------------------
const secret = process.env.JWT_SECRET;
const token = jwt.sign(payload, secret);
return res.status(200).send({ token });
} else {
return res.status(401).send("invalid password!");
}
} catch (error) {
console.error("server error: ", error.message);
return res.status(500).send("server error!");
}
};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment