我在Node.js中使用Express护照,总是,当我在注册页面中提交我的凭据时,它会保存到数据库中,但是在这种情况下,当我路由到另一个ejs的productos2页面时(您将在下面的代码)也向我发送了错误请求,当我尝试登录时也会向我发送错误请求。
所以我很难确定它可能是bodyParser.urlencoded({extended:false}),所以我将其更改为extended:true,更新了bodyParser包并检查文件中的拼写错误
SERVER.JS:
require('dotenv').config();
const express = require("express");
const bodyParser = require("body-parser");
const nodemailer = require('nodemailer');
const path = require('path');
const ejs = require("ejs");
const mongoose = require("mongoose");
const session = require('express-session');
const passport = require("passport");
const passportLocalMongoose = require("passport-local-mongoose");
const app = express();
app.use(express.static("public"));
app.use('/static', express.static(path.join(__dirname, '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://localhost:27017/productosDB", {
useNewUrlParser: true
});
mongoose.set("useCreateIndex", true);
const credentialsSchema = new mongoose.Schema ({
user: String,
password: String
});
credentialsSchema.plugin(passportLocalMongoose);
const Credential = new mongoose.model("Credential", credentialsSchema);
passport.use(Credential.createStrategy());
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
Credential.findById(id, function(err, user) {
done(err, user);
});
});
app.get("/productos2", function(req, res) {
if (req.isAuthenticated()) {
res.render("productos2");
} else {
res.redirect("/signin");
}
});
app.post("/registrate", function(req, res) {
Credential.register({username: req.body.email},
req.body.password, function(err, user){
if(err) {
console.log(err);
res.redirect("/registrate");
} else {
passport.authenticate("local")(req, res, function() {
res.redirect("/productos2");
});
}
});
});
app.post("/signin", function(req, res) {
const user = new Credential ({
user : req.body.email,
password : req.body.password
});
req.login(user, function(err) {
if (err) {
console.log(err);
} else {
passport.authenticate("local")(req, res, function() {
res.redirect("/productos2");
});
}
});
所以我要在这里实现的是,当您成功登录或注册时,它会将您路由到productos2页面