使用带有socket.io的passport.js时出现错误请求

时间:2018-04-13 20:24:39

标签: javascript node.js

我正在使用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 %>

0 个答案:

没有答案