Tell us what’s happening:
works perfectly, but fails all tests except the first one.
I have changed line 3 of pug files as mentioned
I delete the freeCodeCamp entry on mongoDB and ensure my app is active in glitch before trying each test
I have added delays to routes
I tried downgrading some packages - I think this must be the problem somehow?
All to no avail - anyone have any ideas what can possibly still be wrong?
Your code so far
“use strict”;
const express = require("express");
const fccTesting = require("./freeCodeCamp/fcctesting.js");
const pug = require("pug");
const bodyParser = require("body-parser");
const session = require("express-session");
const passport = require("passport");
const ObjectID = require("mongodb").ObjectID;
const mongo = require("mongodb").MongoClient;
const LocalStrategy = require("passport-local");
const cors = require("cors");
//const bcrypt = require('bcrypt');
const app = express();
require("dotenv").config();
fccTesting(app); //For FCC testing purposes
app.use(cors());
app.use("/public", express.static("/public"));
//app.use(express.json());
app.use(express.urlencoded({ extended: true }));
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
})
);
app.use(passport.initialize());
app.use(passport.session());
if (process.env.ENABLE_DELAYS)
app.use((req, res, next) => {
switch (req.method) {
case "GET":
switch (req.url) {
case "/logout":
return setTimeout(() => next(), 400);
case "/profile":
return setTimeout(() => next(), 600);
default:
next();
}
break;
case "POST":
switch (req.url) {
case "/login":
return setTimeout(() => next(), 800);
default:
next();
}
break;
default:
next();
}
});
//console.log("our env is "+JSON.stringify(process.env.DATABASE));
// DATABASE is my database, but using codecamps db to pass tests
//using DB_URI for testing
mongo.connect(
process.env.DATABASE,
//{ useUnifiedTopology: true },
(err, client) => {
var db = client.db("pug");
if (err) {
console.log(db + "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, user) => {
done(null, user);
}
);
});
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);
} else {
console.log("successfull login of user: " + JSON.stringify(user));
return done(null, user);
}
});
})
);
function ensureAuthenticated(req, res, next) {
if (req.isAuthenticated()) {
return next();
}
console.log("user not authenticated");
res.redirect("/");
}
app.route("/").get((req, res) => {
//Change the response to render the Pug template
res.render(process.cwd() + "/views/pug/index", {
title: "Home Page",
message: "login",
showLogin: true,
showRegistration: true
});
});
app
.route("/login")
.post(
passport.authenticate("local", { failureRedirect: "/" }),
(req, res) => {
console.log("post to /login with " + JSON.stringify(req.body));
// might need to store user on 'session' variable? var req.session.user=req.user;
req.session.username = req.user.username;
console.log("user found? " + JSON.stringify(req.user));
res.redirect("/profile");
// res.send("hi");
}
);
app.route("/profile").get(ensureAuthenticated, (req, res) => {
const username = req.session.username;
delete req.session.username;
res.render(process.cwd() +'/view/pug/profile', {username:req.user.username});
// req.logIn(req.user, err => {
// err
// ? next(err)
// : res.render(process.cwd() + "/views/pug/profile", {
// title: "Profile Home Page",
// username: req.user
// });
// });
});
app.route("/register").post(
(req, res, next) => {
// var hash = bcrypt.hashSync(req.body.password, 12);
db.collection("users").findOne(
{ username: req.body.username },
(err, user) => {
if (err) {
next(err);
} else if (user) {
console.log(
JSON.stringify(user.username) + " Already exists in Db"
);
req.session.username = user.username;
res.redirect("/"); // I think should be redirected to /profile...but pass tests
// res.render(process.cwd() + "/views/pug/index", {
// title: 'Hello',
// message: 'Already a member',
// showLogin: true,
// showRegistration: true });
} else {
db.collection("users").insertOne(
{
username: req.body.username,
password: req.body.password
},
(err, user) => {
if (err) {
res.redirect("/");
} else {
next(null, user);
}
}
);
}
}
);
},
passport.authenticate("local", { failureRedirect: "/" }),
(req, res, next) => {
res.redirect("/profile");
}
);
app.route("/logout").get((req, res) => {
console.log("Logged out");
req.logout();
res.redirect("/");
});
app.use((req, res, next) => {
res.status(404)
.type('text')
.send('Not Found');
});
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 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36
.
Challenge: Registration of New Users
Link to the challenge: