我正在使用node.js express socket.io和mongodb制作聊天应用程序。我已使用passport.js为注册路由添加了身份验证功能,如下面的代码所示。我正在尝试注册时收到错误请求。它发生在第133行。我已经打印出了请求,对于任何能解决这个问题的人都会有很大的帮助。我搜索谷歌很多,找不到解决方案。 (检查下面的验证功能。我的其他文件如下:
以下是app.js代码
var express = require("express"),
mongoose = require("mongoose"),
app = express(),
server = require("http").createServer(app),
bodyParser = require("body-parser"),
io = require("socket.io").listen(server),
//Authentication tools
passport = require("passport"),
LocalStrategy = require("passport-local"),
//require all models
User = require("./models/user");
//Connect a database
var url = process.env.DATABASEURL || "mongodb://localhost/chatApplication";
mongoose.connect(url);
app.set("view engine","ejs");
app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());
//Passport Authentication(Keep at end)
//creating a session.
app.use(require("express-session")({
secret:"A socket app",
resave: false,
saveUninitialized: false
}));
//Initialze a session and passport
app.use(passport.initialize());
app.use(passport.session());
passport.use(new LocalStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
//Adding a function to all the paths
app.use(function(req,res,next){
console.log("User: - " + req.user);
res.locals.currentUser = req.user;
next();
});
//When The Conection is established and active.
io.sockets.on("connection",function(userSocket){
console.log("Socket" + userSocket.id);
userSocket.on("sendMessage",function(data){
//broadcasting message to users.
io.sockets.emit("newMessage",data);
});
});
//Root Routes
app.get("/",function(req,res){
res.render("index");
});
//Chat Routes
app.get("/chat",isLoggedIn,function(req,res){
res.render("chats/chat");
});
//Authentication Routes
//Login Routes
app.get("/login",function(req,res){
res.render("authentication/login");
});
app.post("/login",function(req,res){
console.log("ID: - " + req.params.id);
res.redirect("/chat");
});
//Register Routes
app.get("/register",function(req,res){
res.render("authentication/register");
});
app.post("/register",function(req,res){
//Get New User;
var userName = new User({username:req.body.name});
//Register the new User
User.register(userName,req.body.password,function(err,user){
if(err){
console.log(err);
res.redirect("/register");
}
else{
console.log("User : - "+user);
console.log(req);
passport.authenticate("local")(req,res,function(){
console.log("User Id " + user._id);
res.redirect("/chat");
});
}
});
});
function isLoggedIn(req,res,next){
if(req.isAuthenticated()){
return next();
}
else{
res.redirect("/login");
}
}
var server = app.listen(3000,function(req,res){
console.log("Connected on server");
});
var express = require("express"),
mongoose = require("mongoose"),
app = express(),
server = require("http").createServer(app),
bodyParser = require("body-parser"),
io = require("socket.io").listen(server),
//Authentication tools
passport = require("passport"),
LocalStrategy = require("passport-local"),
//require all models
User = require("./models/user");
//Connect a database
var url = process.env.DATABASEURL || "mongodb://localhost/chatApplication";
mongoose.connect(url);
app.set("view engine","ejs");
app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());
//Passport Authentication(Keep at end)
//creating a session.
app.use(require("express-session")({
secret:"A socket app",
resave: false,
saveUninitialized: false
}));
//Initialze a session and passport
app.use(passport.initialize());
app.use(passport.session());
passport.use(new LocalStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
//Adding a function to all the paths
app.use(function(req,res,next){
console.log("User: - " + req.user);
res.locals.currentUser = req.user;
next();
});
//When The Conection is established and active.
io.sockets.on("connection",function(userSocket){
console.log("Socket" + userSocket.id);
userSocket.on("sendMessage",function(data){
//broadcasting message to users.
io.sockets.emit("newMessage",data);
});
});
//Root Routes
app.get("/",function(req,res){
res.render("index");
});
//Chat Routes
app.get("/chat",isLoggedIn,function(req,res){
res.render("chats/chat");
});
//Authentication Routes
//Login Routes
app.get("/login",function(req,res){
res.render("authentication/login");
});
app.post("/login",function(req,res){
console.log("ID: - " + req.params.id);
res.redirect("/chat");
});
//Register Routes
app.get("/register",function(req,res){
res.render("authentication/register");
});
app.post("/register",function(req,res){
//Get New User;
var userName = new User({username:req.body.name});
//Register the new User
User.register(userName,req.body.password,function(err,user){
if(err){
console.log(err);
res.redirect("/register");
}
else{
console.log("User : - "+user);
console.log(req);
passport.authenticate("local")(req,res,function(){
console.log("User Id " + user._id);
res.redirect("/chat");
});
}
});
});
function isLoggedIn(req,res,next){
if(req.isAuthenticated()){
return next();
}
else{
res.redirect("/login");
}
}
var server = app.listen(3000,function(req,res){
console.log("Connected on server");
});
user.js的(模型)
var mongoose = require("mongoose");
var passportLocalMongoose = require("passport-local-mongoose");
var userSchema = new mongoose.Schema({
username: String,
password: String
});
userSchema.plugin(passportLocalMongoose);
module.exports = mongoose.model("User",userSchema);
Register.ejs
<% include ../partials/header %>
<style type="text/css">
#form{
margin:0px auto;
padding-bottom: 20px;
width:47%;
}
h1{
text-align: center;
}
#container{
margin-top: 200px;
width:24em;
}
</style>
<div class="container bg-light border-light rounded" id="container">
<form action="/register" id= "form" method="POST">
<h1 class="py-3"> Sign UP!!</h1>
<div class="form-group">
<input type="text" name="name" placeholder="Enter your username">
</div>
<div class="form-group">
<input type="password" name="password" placeholder="Enter your password">
</div>
<div class="form-group">
<input type="submit" class="btn btn-primary mx-5" value="Sign Up">
</div>
</form>
</div>
<% include ../partials/footer %>