Думаю, может быть какая-то проблема в том, как вы импортировали файл password-local-mon goose.
//jshint esversion:6
require('dotenv').config()
const express = require("express");
const bodyParser = require("body-parser");
const ejs = require("ejs");
const mongoose = require("mongoose");
const session = require("express-session");
const passport = require("passport");
const passportLocalMongoose = require("passport-local-mongoose");
const GoogleStrategy = require("passport-google-oauth20").Strategy;
const findOrCreate = require("mongoose-findorcreate");
const app = express();
const userSchema = new mongoose.Schema({
email: String,
password: String,
googleId: String,
secret: Array
});
userSchema.plugin(passportLocalMongoose);
userSchema.plugin(findOrCreate)
const User = new mongoose.model("User", userSchema)
passport.use(User.createStrategy());
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
passport.use(new GoogleStrategy({
clientID: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
callbackURL: "http://shielded-ocean-
16775.herokuapp.com/auth/google/secrets",
userProfileUrl: "https://www.googleleapis.com/oauth2/v3/userinfo"
},
function(accessToken, refreshToken, profile, cb) {
console.log(profile);
User.findOrCreate({
googleId: profile.id
}, function(err, user) {
return cb(err, user);
});
}
));
app.use(express.static("public"));
app.use(bodyParser.urlencoded({
extended: true
}));
app.set("view engine", "ejs");
app.use(session({
secret: "The Secret Shall Never Be Disclosed",
resave: false,
saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.session())
mongoose.connect("mongodb+srv://admin-videep:805122@cluster1805.nuxh2.mongodb.net/userDB", {
useNewUrlParser: true
})
mongoose.set("useCreateIndex", true);
app.get("/", function(req, res) {
res.render("home");
})
app.get("/auth/google",
passport.authenticate("google", {
scope: ["profile"]
})
)
app.get("/auth/google/secrets",
passport.authenticate('google', {
failureRedirect: "/login"
}),
function(req, res) {
res.redirect("/secrets");
});
app.get("/login", function(req, res) {
res.render("login");
})
app.get("/register", function(req, res) {
res.render("register");
})
app.get("/secrets", function(req, res) {
User.find({
"secret": {
$ne: null
}
}, function(err, foundUsers) {
if (err) {
console.log(err);
} else {
if (foundUsers) {
res.render("secrets", {
usersWithSecrets: foundUsers
})
}
}
})
})
app.get("/submit", function(req, res) {
if (req.isAuthenticated()) {
res.render("submit");
} else {
res.redirect("/login")
}
})
app.get("/logout", function(req, res) {
req.logout()
res.redirect("/")
})
app.get("/about", function(req, res){
res.render("about")
})
app.post("/register", function(req, res) {
User.register({
username: req.body.username
}, req.body.password, function(err, user) {
if (err) {
console.log(err);
res.redirect("/register");
} else {
passport.authenticate("local")(req, res, function() {
res.redirect("/secrets")
})
}
})
});
app.post("/login", function(req, res) {
const user = new User({
username: req.body.username,
password: req.body.password
})
req.login(user, function(err) {
if (err) {
console.log(err);
} else {
passport.authenticate("local")(req, res, function() {
res.redirect("/secrets")
})
}
})
})
app.post("/submit", function(req, res) {
const submittedSecret = req.body.secret;
if (req.isAuthenticated()) {}
User.findById(req.user.id, function(err, foundUser) {
if (err) {
console.log(err);
res.redirect("/login")
} else {
if (foundUser) {
foundUser.secret.push(submittedSecret)
foundUser.save()
res.redirect("/secrets")
}
}
})
})
let port = process.env.PORT;
if (port == null || port == "") {
port = 3000;
}
app.listen(port)
Вот мой полный файл кода, и он отлично работает