Add 'routes/users.js'
This commit is contained in:
parent
87375b9f42
commit
832f78b1af
|
@ -0,0 +1,110 @@
|
|||
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;
|
Loading…
Reference in New Issue