Hi there, I cannot pass the How to Use Passport Strategies 2nd case: A POST request to /login should correctly redirect to /. It always says time-out. Below is my code:
"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 ObjectID = require('mongodb').ObjectID;
const mongo = require('mongodb').MongoClient;
const LocalStrategy = require('passport-local');
const app = express();
app.set('views','./views/pug/');
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, {useUnifiedTopology: true}, (err, client) => {
var db = client.db("test");
if(err) {
console.log('Database error: ' + err);
} else {
console.log('Successful database connection');
//serialization and app.listen
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);
});
}
));
app.route("/").get((req, res) => {
//Change the response to render the Pug template
//res.send(`Pug template is not defined.`);
//res.render('index');
//console.log("redirec");
res.render(process.cwd() + '/views/pug/index', {title: 'Hello', message: 'Please login',showLogin: true});
});
//app.route("/login").psot( passport.authenticate('local', { failureRedirect: '/login' }),
//app.route('/login').post(passport.authenticate('local', { failureRedirect: '/' }), (req, res, next) => {
app.route('/login').post((req,res) => {
//res.redirect('/profile');
//console.log("login");
//User {USERNAME} attempted to log in
console.log("User " + req.body.username + " attempted to log in");
res.redirect('/');
});
app.route('/profile')
.get((req,res) => {
res.render(process.cwd() + '/views/pug/profile');
});
app.listen(process.env.PORT || 3000, () => {
console.log("Listening on port " + process.env.PORT);
});
}
});
Even I copied the suggested answer from github https://gist.github.com/JosephLivengood/8a335d1a68ed9170da02bb9d8f5b71d5
it returned the same time out issue. My code is put on Repl.it. Any help would be highly appreciated. Thanks.