What’s happening:
I tried adding the middlewares I needed, along with a route for /login
, but when I tried to run the code, I got Cannot GET /
message in the browser window. When I completed the previous challenge, that message had gone away and I could see the login form. So what did I do wrong this time? I need some help here.
My code so far
"use strict";
require("dotenv").config();
const express = require("express");
const myDB = require("./connection");
const fccTesting = require("./freeCodeCamp/fcctesting.js");
const session = require("express-session");
const passport = require("passport");
const ObjectID = require("mongodb").ObjectID;
const LocalStrategy = require("passport-local");
const bodyParser = require("body-parser");
const app = express();
app.set("view engine", "pug");
fccTesting(app); //For FCC testing purposes
app.use("/public", express.static(`${process.cwd()}/public`));
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(session({
secret: process.env.SESSION_SECRET,
resave: true,
saveUninitialized: true,
cookie: { secure: false }
}));
app.use(passport.initialize());
app.use(passport.session());
myDB(async client => {
const myDataBase = await client.db("database").collection("users");
app.route("/").get((req, res) => {
res.render("pug", {
title: "Connected to Database",
message: "Please login",
showLogin: true
});
});
app.use(bodyParser.urlencoded({ extended: true }));
app.use(passport.authenticate("local", { failedRedirect: "/" }));
app.route("/login").post((req, res) => {
if (req.body) {
console.log(req.body);
}
});
passport.serializeUser((user, done) => {
done(null, user._id);
});
passport.deserializeUser((id, done) => {
myDataBase.findOne({ _id: new ObjectID(id) }, (err, doc) => {
done(null, doc);
});
});
passport.use(new LocalStrategy(
(username, password, done) => {
myDataBase.findOne({ username: username }, (err, user) => {
console.log(`User ${username} has 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);
});
}
));
}).catch(e => {
app.route("/").get((req, res) => {
res.render("pug", {
title: e,
message: "Unable to login"
});
});
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Listening on port ${PORT}`);
});
My browser information:
User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36 Edg/90.0.818.56
.
Challenge: How to Use Passport Strategies
Link to the challenge:
I thought I’d first try to see what the POST request body looks like, but I can’t do that until I somehow resolve this issue. So yeah, please help with that first. Thanks.