Challenge: create-new-middleware
Link to the challenge:
https://www.freecodecamp.org/learn/information-security-and-quality-assurance/advanced-node-and-express/create-new-middleware
This is working properly in practice but does not pass the test. (A Get request to /profile should correctly redirect to / since we are not authenticated.)
What should i do instead?
code so far
const express = require("express");
const bodyParser = require("body-parser");
const fccTesting = require("./freeCodeCamp/fcctesting.js");
const passport = require("passport");
const session = require("express-session");
const ObjectID = require("mongodb").ObjectID;
const LocalStrategy = require("passport-local");
const app = express();
const mongo = require("mongodb").MongoClient;
fccTesting(app); //For FCC testing purposes
app.use("/public", express.static(process.cwd() + "/public"));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.set("view engine", "pug");
app.use(
session({
secret: process.env.SESSION_SECRET,
resave: true,
saveUninitialized: true
})
);
const url = process.env.DATABASE_URI;
mongo.connect(url,{ useUnifiedTopology: true }, function(err, client) {
if (err) {
console.log(err);
return;
}
console.log("Connected successfully to server");
const db = client.db("test");
app.use(passport.initialize());
app.use(passport.session());
passport.serializeUser((user, done) => {
done(null, user._id);
});
passport.deserializeUser((id, done) => {
db.collection("users").findOne({ _id: new ObjectID(id) }, (err, doc) => {
done(null, doc);
});
});
passport.use(
new LocalStrategy(function(username, password, done) {
db.collection("users").findOne({ username: username }, function(
err,
user
) {
console.log("User " + username + " attempted to log in.");
if (err) {
return done(err);
}
if (!user) {
return done(null, false);
}
if (password !== user.password) {
return done(null, false);
}
return done(null, user);
});
})
);
function ensureAuthenticated(req, res, next) {
if (req.isAuthenticated()) {
return next();
}
res.redirect("/");
}
app.route("/").get((req, res) => {
res.render(process.cwd() + "/views/pug/index", {
title: "Hello",
message: "Please login",
showLogin: true
});
});
app
.route("/login")
.post(
passport.authenticate("local", { failureRedirect: "/" }),
(req, res) => {
res.redirect("/profile");
}
);
app.route("/profile").get(ensureAuthenticated, (req, res) => {
res.render(process.cwd() + "/views/pug/profile");
});
app.listen(process.env.PORT || 3000, () => {
console.log("Listening on port " + process.env.PORT);
});
});