Функция "регистр" в паспорте-локальный-мон goose не работает "User.register не является функцией" - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь использовать функцию регистрации из Passport-local-mon goose, но по какой-то причине я не могу заставить ее работать. Я новичок в веб-разработке в целом и в основном не понимаю, что именно эти библиотеки и фреймворки делают за кулисами. Я понимаю, что password-local-mon goose должен упростить регистрацию пользователей, но по какой-то причине этот код не работает. Я поместил здесь соответствующий код, если кому-то нужно больше кода, сообщите мне.

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

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

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");
      });
    }
  });
});

1 Ответ

0 голосов
/ 05 августа 2020

Думаю, может быть какая-то проблема в том, как вы импортировали файл 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)

Вот мой полный файл кода, и он отлично работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...