111 lines
2.7 KiB
JavaScript
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;
|