Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Login API #4

Merged
merged 4 commits into from Feb 2, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
7 changes: 7 additions & 0 deletions server/controllers/auth/index.js
@@ -0,0 +1,7 @@
const login = require('./login')
const signup = require('./signup')

module.exports = {
...login,
...signup
}
82 changes: 82 additions & 0 deletions server/controllers/auth/login.js
@@ -0,0 +1,82 @@
// modules
const bcrypt = require('bcrypt');
const jwt = require('jsonwebtoken');

const database = require("../../database");

exports.login = (req, res, next) => {
// todo: 'remember me' feature
const email = req.body.email;
const password = req.body.password;
mittalyashu marked this conversation as resolved.
Show resolved Hide resolved

// find member using email address
database.query(`
SELECT
member_id, first_name, last_name, email_address, password, profile_picture, is_owner, is_moderator, is_blocked, created_at
FROM
member
WHERE
email_address = '${email}'
;`).then(databaseResult => {
// get first member from array of objects
const memberData = databaseResult.rows[0];

// validate member password with encrypted password in database
bcrypt.compare(password, memberData.password).then(validatePassword => {
mittalyashu marked this conversation as resolved.
Show resolved Hide resolved
if (validatePassword) {

const loginToken = jwt.sign({
member_id: memberData.member_id,
email_address: memberData.email_address,
is_owner: memberData.is_owner,
is_moderator: memberData.is_moderator,
is_blocked: memberData.is_blocked,
created_at: memberData.created_at
mittalyashu marked this conversation as resolved.
Show resolved Hide resolved
mittalyashu marked this conversation as resolved.
Show resolved Hide resolved
}, 'secretKey', { expiresIn: '2d' });
mittalyashu marked this conversation as resolved.
Show resolved Hide resolved

res.status(200).send({
status: {
code: 200,
type: "success"
},
member: {
member_id: memberData.member_id,
first_name: memberData.first_name,
last_name: memberData.last_name,
email_address: memberData.email_address,
profile_picture: memberData.profile_picture,
is_owner: memberData.is_owner,
is_moderator: memberData.is_moderator,
is_blocked: memberData.is_blocked,
created_at: memberData.created_at
},
token: loginToken
})
} else {
res.status(409).send({
status: {
code: 409,
type: "error"
},
error: {
code: "invalid_password",
message: "Password is incorrect"
}
})
}
});
}).catch(error => {
console.error(error);

res.status(409).send({
status: {
code: 409,
type: "error"
},
error: {
code: "member_not_found",
message: "Member not found."
}
})
});
}
3 changes: 2 additions & 1 deletion server/routes/v1/auth.js
Expand Up @@ -3,8 +3,9 @@ const express = require('express');
const router = express.Router();

// controller
const auth = require('../../controllers/auth/signup');
const auth = require('../../controllers/auth');

router.post('/auth/signup', auth.signup)
router.post('/auth/login', auth.login)

module.exports = router