I'm experiencing the same problem described in this question, where the LocalStrategy is never called, and I've already determined that the problem isn't with empty or misnamed fields. I suspect that it's a problem with express.bodyParser() being deprecated, but replacing it with bodyParser.json() and bodyParser.urlencoded() doesn't seem to help.
Here's my code:
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var session = require('express-session');
var mongoose = require('mongoose');
var route = require('./routes/index');
var users = require('./routes/users');
var login = require('./routes/login.js');
var db = require('./db')
var app = express();
//mongoose stuff
//passport
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
app.use(express.static('public'));
app.use(session({ secret: 'keyboard cat' }));
app.use(passport.initialize());
app.use(passport.session());
passport.serializeUser(function (user, done) {
console.log('serializeUser called');
done(null, user);
});
passport.deserializeUser(function (id, done) {
/*User.findById(id, function (err, user) {
done(err, user);
});*/
console.log('deserializeUser called');
done(null, user);
});
passport.use(new LocalStrategy(
function (username, password, done) {
console.log('authentication in progress');
User.findOne({ 'username': username }, function (err, user) {
if (err) { return done(err); } //server exception
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
if (!user.validPassword(password)) {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, user); //passed
});
}
));
// view engine stuff
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
var passport = require('passport')
, LocalStrategy = require('passport-local').Strategy;
app.post('/login',
function (req, res) {
console.log('login request recieved from ', req.param('username'), req.param('password'));
passport.authenticate('local', {
successRedirect: '/win',
failureRedirect: '/fail'
})
}
);
app.get('/login',
function (req, res) {
res.render('login');
}
);
// error handlers
module.exports = app;
When I send in a login POST with both fields filled out, I see the "login request received" but not "authentication in progress".
I've verified that the login page is sending 'username' and 'password' as POST parameters, so the issue isn't on the form.
Is it really the bodyParser that's causing the problem, or have I overlooked something?
Aucun commentaire:
Enregistrer un commentaire