90 lines
1.6 KiB
JavaScript
90 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, next) => {
|
|
let user;
|
|
try {
|
|
user = await users.getByEmail(req.body.email);
|
|
} catch (error) {
|
|
console.log(error);
|
|
return next(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,
|
|
};
|