Why am I seeing "bad request" when I run my code using nodemon app.js?

20 Views Asked by At

**this is my app.js code: **

import dotenv from "dotenv";
import express from "express";
import bodyParser from "body-parser";
import ejs from "ejs";
import mongoose from "mongoose";
import session from "express-session";
import passport from "passport";
import passportLocalMongoose from "passport-local-mongoose";
import { Strategy as GoogleStrategy } from "passport-google-oauth20";

dotenv.config();

const app = express();
const PORT = process.env.PORT || 3000;

app.use(express.static("public"));
app.set("view engine", "ejs");
app.use(bodyParser.urlencoded({ extended: true }));

app.use(session({
  secret: "our little secret.",
  resave: false,
  saveUninitialized: false
}));

app.use(passport.initialize());
app.use(passport.session());

mongoose.connect('mongodb://127.0.0.1:27017/UserDB', {
  useNewUrlParser: true,
  useUnifiedTopology: true
})
  .then(() => console.log("Connected to MongoDB"))
  .catch(error => console.error("MongoDB connection error:", error));

const userSchema = new mongoose.Schema({
  email: String,
  password: String,
  googleId: String,
  secret: String
});

userSchema.plugin(passportLocalMongoose);
const User = mongoose.model("User", userSchema);

passport.use(User.createStrategy());

passport.serializeUser((user, done) => {
  done(null, user.id);
});

passport.deserializeUser((id, done) => {
  User.findById(id, (err, user) => {
    done(err, user);
  });
});

passport.use(new GoogleStrategy({
  clientID: process.env.CLIENT_ID,
  clientSecret: process.env.CLIENT_SECRET,
  callbackURL: "http://localhost:3000/auth/google/Secrets",
  userProfileURL: "https://www.googleapis.com/oauth2/v3/userinfo"
}, (accessToken, refreshToken, profile, done) => {
  return done(null, profile);
}));

app.get("/", (req, res) => {
  res.render("home.ejs");
});

app.get("/login", (req, res) => {
  res.render("login.ejs")
});

app.get("/register", (req, res) => {
  res.render("register.ejs")
});

app.get("/secrets", (req, res) => {
  if (req.user) { // Check if there's a user in the session
    User.find({ secret: { $ne: null } })
      .then(foundUsers => {
        res.render("secrets.ejs", { usersWithSecrets: foundUsers });
      })
      .catch(err => {
        console.log("Error finding users with secrets", err);
        res.redirect("/login");
      });
  } else {
    res.redirect("/login");
  }
});

app.get("/logout", (req, res) => {
  req.logout(function (err) {
    if (err) {
      console.log("Error logging out", err);
      res.redirect("/");
    } else {
      res.redirect("/");
    }
  });
});

// Route for Google OAuth login
app.get("/auth/google", passport.authenticate("google", { scope: ["profile"] }));

// Callback URL after Google has authenticated the user
app.get("/auth/google/Secrets",
  passport.authenticate("google", { failureRedirect: "/login" }),
  (req, res) => {
    // Successful authentication, redirect to a page or perform other actions.
    passport.authenticate("local")(req, res, () => {
      res.redirect("/secrets");
    });
  }
);

app.post("/register", (req, res) => {
  try {
    const user = new User({
      username: req.body.username,
    });

    User.register(user, req.body.password, (error, registeredUser) => {
      if (error) {
        console.log("Problem registering a new user", error);
        res.send("<h3>Failed to register you!!</h3>");
      } else {
        passport.authenticate("local")(req, res, () => {
          res.redirect("/secrets");
        });
      }
    });

  } catch (error) {
    console.log(`Problem registering a new user ${error}`);
    res.send("<h3>Failed to register you!!</h3>");

  }
});
app.post("/login", async (req, res) => {
  try {
    const user = new User({
      username: req.body.username,
      password: req.body.password
    })
    req.login(user, function (err) {
      if (err) {
        console.log("Problem logging in the user", error);
        res.send("<h3>Failed to login!!</h3>");
      } else {
        passport.authenticate("local")(req, res, () => {
          res.redirect("/secrets");
        })
      }
    })
  } catch (error) {
    console.log(`Problem logging in a user ${error}`);
    res.send("Failed to Login!!");
  }
})

app.listen(PORT, () => {
  console.log(`Server started on port ${PORT}.`);
});

please, a brief answer with solution code will be much appreciated. thanks in advance

I tried comparing my OAuth 2.0 credentials with my code and everything seems perfect. It's really frustrating cause I have been on this for days.

0

There are 0 best solutions below