Mpoknimu/routes/users.js

111 lines
2.7 KiB
JavaScript

const express = require("express");
const router = express.Router();
const Joi = require("joi");
const User = require("../models/user.js");
const passport = require("passport");
const userSchema = Joi.object().keys({
email: Joi.string()
.email()
.required(),
username: Joi.string()
.regex(/^[a-zA-Z0-9]{4,12}$/)
.required(),
password: Joi.string()
.regex(/^[a-zA-Z0-9]{3,30}$/)
.required(),
confirmPassword: Joi.any()
.valid(Joi.ref("password"))
.required()
});
const isAuthenticated = (req, res, next) => {
if (req.isAuthenticated()) {
// GOOD
return next();
} else {
req.flash("error", "Sorry, but you must be registered first!");
res.redirect("/");
}
};
// Revisar esta parte
/* const isNotAuthenticated = (req, res, next) => {
if (req.isAuthenticated()) {
// GOOD
return next();
req.flash("error", "Sorry, but you are already logged in!");
} else {
res.redirect("/");
}
}; */
router
.route("/register")
.get((req, res) => {
res.render("register");
})
.post(async (req, res, next) => {
try {
const result = Joi.validate(req.body, userSchema);
//console.log("result", result);
if (result.error) {
req.flash("error", "Data is not valid. Please try again.");
res.redirect("/users/register");
return;
}
// Check email
const user = await User.findOne({ email: result.value.email });
if (user) {
req.flash("error", "Email is already in use.");
res.redirect("/users/register");
return;
}
// Hash the password
const hash = await User.hashPassword(result.value.password);
//console.log('hash', hash);
// Save to DB
delete result.value.confirmPassword;
// Override the password with the hash
result.value.password = hash;
//console.log('new values', result.value);
const newUser = await new User(result.value);
console.log("newUser", newUser);
await newUser.save();
req.flash("success", "You may now login.");
res.redirect("/users/login");
return;
} catch (error) {
next(error);
}
});
router
.route("/login")
.get((req, res) => {
res.render("login");
})
.post(
passport.authenticate("local", {
successRedirect: "/users/dashboard",
failureRedirect: "/users/login",
failureFlash: true
})
);
router.route("/dashboard").get(isAuthenticated, (req, res) => {
res.render("dashboard", {
username: req.user.username
});
});
router.route("/logout").get(isAuthenticated,(req, res) => {
req.logout();
req.flash("success", "Successfully logged out, Hope to see you soon!");
res.redirect("/");
});
module.exports = router;