Hello,
I have no idea why test does not pass, I am successfully redirected while not authenticated by Passport, and I am still getting the test “A Get request to /profile should correctly redirect to / since we are not authenticated.” to not pass.
I have tried:
return res.redirect(301, ‘/’);
res.redirect(301, ‘/’);
res.redirect(’/’);
res.redirect(‘back’);
res.redirect(process.cwd() + ‘/’);
My code follows:
"use strict";
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 mongo = require("mongodb").MongoClient;
const ObjectID = require("mongodb").ObjectID;
const LocalStrategy = require("passport-local");
const app = express();
app.set("view engine", "pug");
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.use(
session({
secret: process.env.SESSION_SECRET,
resave: true,
saveUninitialized: true
})
);
app.use(passport.initialize());
app.use(passport.session());
mongo.connect(process.env.DATABASE, (err, db) => {
if (err) console.log("Database connection ERROR");
else {
console.log("Database connection SUCCESSFUL");
passport.serializeUser((user, done) => {
done(null, user._id);
});
passport.deserializeUser((id, done) => {
db.db()
.collection("users")
.findOne(
{
_id: new ObjectID(id)
},
(err, doc) => {
done(null, doc);
}
);
});
passport.use(
new LocalStrategy(function(username, password, done) {
db.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);
});
})
);
app.get("/", (req, res) => {
// res.render('./pug/index', {title: 'Puggy', message: 'Go Pug, go'});
console.log("Redirected to here..");
res.render(process.cwd() + "/views/pug/index", {
title: "Hello",
message: "Please login",
showLogin: true
});
});
app.post(
"/login",
passport.authenticate("local", { failureRedirect: "/" }),
(req, res) => {
res.redirect("/profile");
}
);
app.get(
"/profile",
function ensureAuthenticated(req, res, next) {
if (req.isAuthenticated()) {
return next();
}
return res.redirect(301, '/');
},
(req, res) => {
res.render(process.cwd() + "/views/pug/profile");
}
);
app.listen(process.env.PORT || 3000, () => {
console.log("Listening on port " + process.env.PORT);
});
}
});
User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36
.
Challenge: Advanced Node and Express - Create New Middleware
Link to the challenge:
https://www.freecodecamp.org/learn/information-security-and-quality-assurance/advanced-node-and-express/create-new-middleware