问题描述
我是MERN(Mongo,Express,React,Node)的新手,正在使用它来创建应用程序。我看到了一个有关护照的教程,并按照教程中的说明完全实现了它,但是我一直在屏幕上看到“错误请求”的呈现。
在我使用教练使用护照进行Express-EJS的过程中,我只是推断出这是有反应的。
基于我所做的调试,从未执行过password.authenticate()函数。散列的密码和通过电子邮件发送的日志会记录到我的mongo服务器上,但永远不会得到验证。我花了一整天的时间进行调试,但无济于事。
下面是我输入的服务器端代码。 Localhost:5000是我的快速服务器,而localhost:3000是我的快速服务器,我们将不胜感激。错误代码400 btw
* Require Dependencies
*/
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 app = express();
app.use(express.static("public"));
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/userDB",{useNewUrlParser: true,useUnifiedTopology: true});
mongoose.set("useCreateIndex",true);
const userSchema = new mongoose.Schema({
email: String,password: String
});
userSchema.plugin(passportLocalMongoose);
const User = new mongoose.model("User",userSchema);
passport.use(User.createStrategy());
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
////////////////////////////// Get Request Block //////////////////////////////
app.get("/secrets",function (req,res) {
if (req.isAuthenticated()) {
res.redirect("http://localhost:3000/secrets");
} else {
res.redirect("/register");
}
});
/////////////////////////////////////////////////////////////////////////////////
app.post("/register",res) {
User.register({ username: req.body.emailId },req.body.password,function (err,user) {
if (err) {
console.log(err);
res.redirect("/error");
} else {
console.log("me");
passport.authenticate("local")(req,res,function () {
console.log("met1e1e");
res.redirect("/secrets");
});
// passport.authenticate('local',{
// successRedirect: '/secrets',// failureRedirect: '/error',// failureFlash: true
// });
}
});
});
app.get("/error",res) {
console.log("debug:wrkbj");
res.redirect("http://localhost:3000/main");
});
app.listen(5000,function () {
console.log("Server live on port 5000.");
});
解决方法
-
将您的架构更改为- const userSchema = new mongoose.Schema({ 用户名:字符串, 密码:字符串 });
-
在您的 app.post("/register" ... 部分,将用户名设为- { 用户名:req.body.username }
由于您的注册方法注册了一个新用户,其中电子邮件存储在用户名中,因此您不能在 userSchema 中使用“电子邮件”。 您还应该将视图文件夹中 register.ejs 文件中的所有“emailId”名称属性替换为“用户名”。这将解决问题。