Tell us what’s happening:
I can’t pass this test - A Get request to /profile should correctly redirect to / since we are not authenticated. I’m sure everything is right as it redirects properly.
Your code so far
'use strict';
const express = require('express');
const bodyParser = require('body-parser');
const fccTesting = require('./freeCodeCamp/fcctesting.js');
const app = express();
const session = require("express-session");
const mongo = require("mongodb").MongoClient;
const passport = require("passport");
const ObjectID = require("mongodb").ObjectID;
const LocalStrategy = require("passport-local");
app.set("view engine", "pug");
process.env.SESSION_SECRET=5;
process.env.DATABASE="mongodb+srv://admin:admin@cluster0-feo3a.mongodb.net/test?retryWrites=true&w=majority"
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)=> {
var db = db.db("test");
if(err) {console.log('Database error: ' + err);}
else {
console.log("Successful database connection");
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(
(username, password, done)=>{
db.collection("users").findOne({username: username}, (err, user)=>{
console.log("Username "+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.route('/')
.get((req, res) => {
res.render(__dirname+"/views/pug/index.pug", {
title: "Hello",
message: "Please login",
showLogin: true
})
});
app.post("/login", passport.authenticate("local", {failureRedirect: "/"}), (req, res)=>{
res.redirect("/profile");
});
function ensureAuthenticated(req, res, next) {
if(req.isAuthenticated) {
res.redirect("/");
}
else {
next()
}
};
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);
});
};
});
Your browser information:
User Agent is: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36
.
Challenge: undefined
Link to the challenge: