Skip to content

Instantly share code, notes, and snippets.

@Hc747
Created September 5, 2018 04:03
Show Gist options
  • Save Hc747/68248f0a479ca2d8fdda345a2bd72a5d to your computer and use it in GitHub Desktop.
Save Hc747/68248f0a479ca2d8fdda345a2bd72a5d to your computer and use it in GitHub Desktop.
const express = require("express");
const router = express.Router();
const User = require("../../models/User.model");
const bcrypt = require("bcrypt");
const JWT = require("jsonwebtoken");
function createToken(user) {
const payload = {
_id: user._id,
email: user.email,
creationDate: user.creationDate
};
return JWT.sign({payload, expiresIn: 3600 * 24}, process.env.JWT_SECRET);
}
router.post('/login', async (request, response, next) => {
try {
const {email, password} = request.body;
if (!email || !password) {
return response.status(400).json({message: 'You must include the parameters: `email` and `password`.'});
}
const user = await User.findOne({email});
if (!user) {
return response.status(404).json({message: 'Incorrect email address or password.'});
}
const validated = await user.isValidPassword(password);
if (!validated) {
return response.status(401).json({message: 'Incorrect email address or password.'});
}
const token = createToken(user);
return response.json({token, message: 'Successfully logged in.'});
} catch (exception) {
next(exception);
}
});
router.post('/register', async (request, response, next) => {
try {
const { name, email, password } = request.body;
if (!name || !email || !password) {
return response.status(400).json({message: 'You must include the parameters: `name`, `email` and `password`.'});
}
let user = await User.findOne({email});
if (user) {
return response.status(401).json({message: 'The email address you\'ve tried to register with has already been taken.'});
}
user = await User.create({name, email, password});
if (!user) {
return response.status(500).json({message: 'An unexpected error occurred whilst registering your account.'});
}
const token = createToken(user);
return response.json({token, message: 'Successfully registered.'});
} catch (exception) {
next(exception);
}
});
module.exports = router;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment