165 lines
2.3 KiB
JavaScript
165 lines
2.3 KiB
JavaScript
const bcrypt = require("bcrypt");
|
|
|
|
const db = require("../config/database");
|
|
const HouseholdService = require("../services/HouseholdService");
|
|
|
|
|
|
|
|
class AuthController {
|
|
|
|
|
|
registerForm(req, res) {
|
|
|
|
res.render("auth/register", {
|
|
title: "Registreren"
|
|
});
|
|
|
|
}
|
|
|
|
|
|
async register(req, res) {
|
|
|
|
const {
|
|
name,
|
|
email,
|
|
password
|
|
} = req.body;
|
|
|
|
|
|
const existingUser = db.prepare(
|
|
"SELECT id FROM users WHERE email = ?"
|
|
).get(email);
|
|
|
|
|
|
if (existingUser) {
|
|
|
|
req.flash(
|
|
"error",
|
|
"E-mailadres bestaat al"
|
|
);
|
|
|
|
return res.redirect("/register");
|
|
|
|
}
|
|
|
|
|
|
const passwordHash = await bcrypt.hash(
|
|
password,
|
|
12
|
|
);
|
|
|
|
|
|
const result = db.prepare(`
|
|
|
|
INSERT INTO users
|
|
(
|
|
name,
|
|
email,
|
|
password
|
|
)
|
|
|
|
VALUES (?, ?, ?)
|
|
|
|
`).run(
|
|
name,
|
|
email,
|
|
passwordHash
|
|
);
|
|
|
|
|
|
const userId = result.lastInsertRowid;
|
|
|
|
|
|
HouseholdService.createForUser(
|
|
userId,
|
|
`${name} huishouden`
|
|
);
|
|
|
|
|
|
req.session.userId = userId;
|
|
|
|
|
|
res.redirect("/");
|
|
|
|
}
|
|
|
|
|
|
|
|
loginForm(req, res) {
|
|
|
|
res.render("auth/login", {
|
|
title: "Inloggen"
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
async login(req, res) {
|
|
|
|
const {
|
|
email,
|
|
password
|
|
} = req.body;
|
|
|
|
|
|
const user = db.prepare(
|
|
"SELECT * FROM users WHERE email = ?"
|
|
).get(email);
|
|
|
|
|
|
|
|
if (!user) {
|
|
|
|
req.flash(
|
|
"error",
|
|
"Ongeldige gegevens"
|
|
);
|
|
|
|
return res.redirect("/login");
|
|
|
|
}
|
|
|
|
|
|
const valid = await bcrypt.compare(
|
|
password,
|
|
user.password
|
|
);
|
|
|
|
|
|
if (!valid) {
|
|
|
|
req.flash(
|
|
"error",
|
|
"Ongeldige gegevens"
|
|
);
|
|
|
|
return res.redirect("/login");
|
|
|
|
}
|
|
|
|
|
|
req.session.userId = user.id;
|
|
|
|
|
|
res.redirect("/");
|
|
|
|
}
|
|
|
|
|
|
|
|
logout(req, res) {
|
|
|
|
req.session.destroy(() => {
|
|
|
|
res.redirect("/login");
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
module.exports = new AuthController(); |