Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 4cc6f58

Browse files
complete user registration
1 parent 670616f commit 4cc6f58

File tree

15 files changed

+486
-6
lines changed

15 files changed

+486
-6
lines changed

‎server/controllers/errorController.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
"use strict";
2+
3+
const httpStatus = require("http-status-codes");
4+
5+
exports.logErrors = (error, req, res, next) => {
6+
console.error(error.stack);
7+
next(error);
8+
};
9+
10+
exports.respondNoResourceFound = (req, res) => {
11+
let errorCode = httpStatus.NOT_FOUND;
12+
res.status(errorCode);
13+
// res.send(`${errorCode} | The page does not exist!`);
14+
res.sendFile("public/html/Er404.html");
15+
};
16+
17+
exports.respondInternalError = (error, req, res, next) => {
18+
let errorCode = httpStatus.INTERNAL_SERVER_ERROR;
19+
console.log(`ERROR occurred: ${error.stack}`);
20+
res.status(errorCode);
21+
res.send(`${errorCode} | Sorry, our application is experiencing a problem!`);
22+
};

‎server/controllers/homeController.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
const httpStatus = require("http-status-codes");
2+
exports.sendHome = (req, res)=>{
3+
res.render("index");
4+
console.log(httpStatus.OK);
5+
}
6+
exports.recieveData = (req, res) => {
7+
console.log(req.body);
8+
};
9+
exports.sendProfile = (req, res) => {
10+
res.render("profile", {name: req.params.name});
11+
};
12+

‎server/controllers/userLogin.js

Whitespace-only changes.

‎server/controllers/usersController.js

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
"use strict";
2+
3+
const User = require("../models/user");
4+
const getUserParams = body => {
5+
return {
6+
name: {
7+
first: body.first,
8+
last: body.last
9+
},
10+
email: body.email,
11+
password: body.password,
12+
}
13+
}
14+
15+
module.exports = {
16+
index: (req, res, next) => {
17+
User.find().then((users) => {
18+
res.locals.users = users;
19+
next();
20+
});
21+
},
22+
indexView: (req, res) => {
23+
res.render("users/index", {
24+
flashMessages: {
25+
success: "Loaded all users ",
26+
},
27+
});
28+
},
29+
new: (req, res) => {
30+
res.render("user/create");
31+
},
32+
create: (req, res, next) => {
33+
if (req.skip) next();
34+
let newUser = new User(getUserParams(req.body));
35+
User.register(newUser, req.body.password, (error, user) => {
36+
if (user) {
37+
req.flash(
38+
"Success",
39+
`${user.name.first}'s account created successfully!`
40+
41+
);
42+
console.log(user);
43+
res.locals.redirect = `/user/${user.name.first}`;
44+
next();
45+
} else {
46+
req.flash(
47+
"error",
48+
`Failed to create user account because: ${error.message}.`
49+
);
50+
res.locals.redirect = "/";
51+
next()
52+
}
53+
});
54+
},
55+
userFeed: (req, res) => {
56+
res.render("user", {userName:req.params.user});
57+
58+
},
59+
redirectView: (req, res, next) => {
60+
let redirectPath = res.locals.redirect;
61+
if (redirectPath) res.redirect(redirectPath);
62+
},
63+
login: (req, res) => {
64+
res.render("users/login");
65+
},
66+
authenticate: (req, res, next) => {
67+
User.findOne({ email: req.body.email })
68+
.then((user) => {
69+
if (user) {
70+
user.passwordComparison(req.body.password).then((passwordsMatch) => {
71+
if (passwordsMatch) {
72+
res.locals.redirect = `/user/${user._id}`;
73+
req.flash("success", `${user.first}'s logged in successfully!`);
74+
res.locals.user = user;
75+
} else {
76+
req.flash(
77+
"error",
78+
"Failed to log in user account: Incorrect Password."
79+
);
80+
res.locals.redirect = "/login";
81+
}
82+
next();
83+
});
84+
} else {
85+
req.flash(
86+
"error",
87+
"Failed to log in user account: User account not found."
88+
);
89+
res.locals.redirect = "/login";
90+
next();
91+
}
92+
})
93+
.catch((error) => {
94+
console.log(`Error logging in user: ${error.message}`);
95+
next(error);
96+
});
97+
},
98+
validate: (req, res, next) => {
99+
req
100+
.sanitizeBody("email")
101+
.normalizeEmail({
102+
all_lowercase: true,
103+
})
104+
.trim();
105+
req.check("email", "Email is invalid").isEmail();
106+
req.check("password", "Password cannot be empty").notEmpty();
107+
req.check("first", "this cannot be empty").notEmpty();
108+
req.check("last", "this cannot be empty").notEmpty();
109+
110+
111+
req.getValidationResult().then((error) => {
112+
if (!error.isEmpty()) {
113+
let messages = error.array().map((e) => e.msg);
114+
req.skip = true;
115+
req.flash("error", messages.join(" and "));
116+
res.locals.redirect = "/";
117+
next();
118+
} else {
119+
next();
120+
}
121+
});
122+
},
123+
};

‎server/main.js

Lines changed: 90 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,92 @@
1-
const express = require("express");
2-
const app = express();
3-
const router = express.Router();
1+
"use strict";
2+
3+
const express = require("express"),
4+
app = express(),
5+
router = express.Router(),
6+
layouts = require("express-ejs-layouts"),
7+
mongoose = require("mongoose"),
8+
// methodOverride = require("method-override"),
9+
expressSession = require("express-session"),
10+
cookieParser = require("cookie-parser"),
11+
connectFlash = require("connect-flash"),
12+
expressValidator = require("express-validator"),
13+
passport = require("passport"),
14+
errorController = require("./controllers/errorController"),
15+
homeController = require("./controllers/homeController"),
16+
// subscribersController = require("./controllers/subscribersController"),
17+
usersController = require("./controllers/usersController"),
18+
// coursesController = require("./controllers/coursesController"),
19+
User = require("./models/user");
20+
21+
mongoose.Promise = global.Promise;
22+
23+
mongoose.connect("mongodb://localhost:27017/recipe_db", {
24+
useNewUrlParser: true, useUnifiedTopology: true
25+
});
26+
mongoose.set("useCreateIndex", true);
27+
28+
const db = mongoose.connection;
29+
30+
db.once("open", () => {
31+
console.log("Successfully connected to MongoDB using Mongoose!");
32+
});
33+
34+
app.set("port", process.env.PORT || 3000);
35+
app.set("view engine", "ejs");
36+
37+
router.use(express.static("public"));
38+
router.use(layouts);
39+
router.use(
40+
express.urlencoded({
41+
extended: false,
42+
})
43+
);
44+
45+
// router.use(
46+
// methodOverride("_method", {
47+
// methods: ["POST", "GET"],
48+
// })
49+
// );
50+
51+
router.use(express.json());
52+
router.use(cookieParser("secret_passcode"));
53+
router.use(
54+
expressSession({
55+
secret: "secret_passcode",
56+
cookie: {
57+
maxAge: 4000000,
58+
},
59+
resave: false,
60+
saveUninitialized: false,
61+
})
62+
);
63+
64+
router.use(passport.initialize());
65+
router.use(passport.session());
66+
passport.use(User.createStrategy());
67+
passport.serializeUser(User.serializeUser());
68+
passport.deserializeUser(User.deserializeUser());
69+
router.use(connectFlash());
70+
71+
router.use((req, res, next) => {
72+
res.locals.flashMessages = req.flash();
73+
next();
74+
});
75+
router.use(expressValidator());
76+
// router.use(homeController.logRequestPaths);
77+
78+
router.get("/", homeController.sendHome);
79+
router.get("/register", usersController.new);
80+
router.post("/user/create", usersController.validate, usersController.create, usersController.redirectView);
81+
router.get("/login", usersController.login);
82+
router.post("/login", usersController.authenticate, usersController.redirectView); // app.get("/:name", homeController.sendProfile); app.get("/user", usersController.index, usersController.indexView) //Middlewares
83+
router.get("/user/:user", usersController.userFeed);
84+
router.use(errorController.logErrors);
85+
router.use(errorController.respondNoResourceFound);
86+
router.use(errorController.respondInternalError);
487

588
app.use("/", router);
6-
router.post("/login", )
89+
90+
app.listen(app.get("port"), () => {
91+
console.log(`Server running at http://localhost:${app.get("port")}`);
92+
});

‎server/models/user.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
const mongoose = require("mongoose");
2+
const passportLocalMongoose = require("passport-local-mongoose");
3+
const userSchema = mongoose.Schema(
4+
{
5+
name: {
6+
first: {
7+
type: String,
8+
required: true,
9+
trim: true,
10+
},
11+
last: {
12+
type: String,
13+
trim: true,
14+
},
15+
},
16+
email: {
17+
type: String,
18+
required: true,
19+
lowercase: true,
20+
unique: true,
21+
},
22+
},
23+
{
24+
timestamps: true,
25+
}
26+
);
27+
userSchema.plugin(passportLocalMongoose, {
28+
usernameField: "email",
29+
});
30+
module.exports = mongoose.model("user", userSchema);

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /