Files
forgetmenot-django/api/controllers/users.js

86 lines
1.6 KiB
JavaScript

/**
* Controllers: Users
*/
const jwt = require(`jsonwebtoken`);
const { users } = require(`../models`);
const { comparePassword } = require(`../utils`);
/**
* Save
* @param {*} req
* @param {*} res
* @param {*} next
*/
const register = async (req, res, next) => {
try {
await users.register(req.body);
} catch (error) {
return res.status(400).json({ error: error.message });
}
let user;
try {
user = await users.getByEmail(req.body.email);
} catch (error) {
console.log(error);
return next(error, null);
}
const token = jwt.sign(user, process.env.tokenSecret, {
expiresIn: 604800 // 1 week
});
res.json({
message: `Authentication successful`,
token
});
};
/**
* Sign a user in
* @param {*} req
* @param {*} res
* @param {*} next
*/
const login = async (req, res) => {
let user;
try { user = await users.getByEmail(req.body.email); }
catch (error) { return done(error, null); }
if (!user) {
return res.status(404).send({ error: `Authentication failed. User not found.` });
}
const isCorrect = comparePassword(req.body.password, user.password);
if (!isCorrect) {
return res.status(401).send({ error: `Authentication failed. Wrong password.` });
}
const token = jwt.sign(user, process.env.tokenSecret, {
expiresIn: 604800 // 1 week
});
res.json({
message: `Authentication successful`,
token
});
};
/**
* Get a user
* @param {*} req
* @param {*} res
* @param {*} next
*/
const get = async (req, res) => {
const user = users.convertToPublicFormat(req.user);
res.json({ user });
};
module.exports = {
register,
login,
get,
};