我是node.js的新手,并尝试使用Internet上的一些帮助来构建登录系统。但是我对尝试给出ERR_NO_RESPONSE
之后得到POST request
的原因感到完全困惑。我正在发布代码。任何帮助将不胜感激。
注册路线运行良好,数据被保存到我设置的mlab database
中。但是,当我尝试执行发布响应时,登录路由没有响应。
router.js
var express = require('express');
var router = express.Router();
var User = require('../models/user');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var utilities = require('../models/utilities');
// GET route for reading data
router.get('/', function (req, res, next) {
res.render('index');
});
router.get('/profile', function (req, res) {
return res.render('profile');
});
router.route('/login')
.get(function (req, res) {
return res.render('login');
})
.post(function(req, res, next) {
passport.authenticate('login',{
successRedirect : '/profile', // redirect to the secure profile section
failureRedirect : '/', // redirect back to the signup page if there is an error
failureFlash : true
}
)});
passport.js
var LocalStrategy = require('passport-local').Strategy;
var passport = require('passport');
var User = require('../models/user');
module.exports = function(passport){
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
if(err) {
console.error('There was an error accessing the records of' +
' user with id: ' + id);
return console.log(err.message);
}
return done(null, user);
})
});
passport.use('login', new LocalStrategy({
usernameField : 'logemail',
passwordField : 'logpassword',
passReqToCallback : true
},
function(req, email, password, done) {
User.findOne({email: email}, function(err, user) {
if(err) {
return errHandler(err);
}
if(!user) {
return done(null, false, {errMsg: 'User does not exist, please' +
' <a class="errMsg" href="/signup">signup</a>'});
}
if(!user.validPassword(password)) {
return done(null, false, {errMsg: 'Invalid password try again'});
}
return done(null, user);
});
}));
app.js
var app = express();
//used to make mLab connection
mongoose.connect(secret.database, { useNewUrlParser: true });
var db = mongoose.connection;
//handle mongo error
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function () {
console.log("connected");
});
// Configure view engine to render EJS templates.
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
//use sessions for tracking logins
app.use(require('morgan')('combined'));
app.use(require('cookie-parser')());
app.use(session({
secret: 'work hard',
resave: true,
saveUninitialized: false,
store: new MongoStore({
mongooseConnection: db
})
}));
// parse incoming requests
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(passport.initialize());
app.use(passport.session());
// serve static files from template
app.use(express.static(__dirname + '/templateLogReg'));
passport.serializeUser(function(user, done) {
done(null, user.id);
});
// deserialized when subsequent requests are made
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
if(err) {
console.error('There was an error accessing the records of' +
' user with id: ' + id);
return console.log(err.message);
}
return done(null, user);
})
});
require('./config/passport')(passport);
// include routes
var routes = require('./routes/router');
app.use('/', routes);
app.listen(3000, function () {
console.log('Express app listening on port '+secret.port);
});
答案 0 :(得分:0)
我看到的几件事是,我看不到您在done
函数的错误中调用passport.deserializeUser
回调,所以它永远无法正确关闭。
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
if(err) {
console.error('There was an error accessing the records of' +
' user with id: ' + id);
return console.log(err.message); <<----HERE
}
return done(null, user);
})
});
此外,我看不到您在护照errHandler
函数中的LocalStrategy
函数中定义的位置?您没有在此处调用done
回调函数,也返回了错误消息。
passport.use('login', new LocalStrategy({
usernameField : 'logemail',
passwordField : 'logpassword',
passReqToCallback : true
},
function(req, email, password, done) {
User.findOne({email: email}, function(err, user) {
if(err) {
return errHandler(err); <<==== HERE
}
if(!user) {
return done(null, false, {errMsg: 'User does not exist, please' +
' <a class="errMsg" href="/signup">signup</a>'});
}
if(!user.validPassword(password)) {
return done(null, false, {errMsg: 'Invalid password try again'});
}
return done(null, user);
});