Node.js passport 本地认证没有调用中间件

Node.js passport local authentication is not calling the middleware

我正在尝试使用护照进行本地身份验证。根据护照文档,一切似乎都很简单,但由于某种原因,当我调用 passport.authenticate 时,中间件不是 运行。就是什么都没发生。

当我提交注册表单时,post 注册功能是 called.I 在我的浏览器中得到了“已收到”,但是,我看不到任何 console.log passport.use 回调。

服务器:

const express = require('express');
const morgan = require('morgan');
const expressHandleBars = require('express-handlebars');
const path = require('path');
const flash = require('connect-flash');
const session = require('express-session');
const mysqlStore = require('express-mysql-session');
const passport = require('passport');

const { database } = require('./keys');

// Initializations
const app = express();

require('./lib/passport');


// Setting 
app.set('port', process.env.PORT || 4000); 
app.set('views', path.join(__dirname, 'views'));
app.engine('.hbs', expressHandleBars({
    defaultLayout: 'main',
    layoutsDir: path.join(app.get('views'), 'layouts'),
    partialsDir: path.join(app.get('views'), 'partials'),
    extname: '.hbs',
    helpers: require('./lib/handlebars')
}));
app.set('view engine', '.hbs')

// Middleware
app.use(session({
    secret: 'whatever',
    resave: false,
    saveUninitialized: false,
    store: new mysqlStore(database)
}));
app.use(morgan('dev'));
app.use(express.urlencoded({extended: false}));
app.use(express.json());
app.use(flash());
app.use(passport.initialize());
app.use(passport.session());

// Global variables
app.use((req, res, next) => {
    app.locals.success = req.flash('success');
    next();
});

// Routes
app.use(require('./routes'));
app.use(require('./routes/authentication'));
app.use('/links', require('./routes/links'));


// Public
app.use(express.static(path.join('__dirname', 'public')));

// Starting the server
app.listen(app.get('port'), () => {
    console.log('Server on port', app.get('port'));
});

Passport 配置文件 (lib/passport.js):

const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const pool = require('../database');
const helpers = require('./helpers');

passport.use('local-signup', new LocalStrategy({
    usernameField: 'username',
    passwordField: 'password',
    passReqToCallback: true
}, async function(req, username, password, done) {
    
    console.log("Authenticated!!");
    console.log(req.body);
  }
));

路由器调用验证(routes/authenticate.js):

const express = require('express');
const passport = require('passport');

const router = express.Router();


router.get('/signup', (req, res) => {
    res.render('auth/signup');
});


router.post('/signup', (req, res) => {
    
    passport.authenticate('local-signup', {
        successRedirect: '/profile',
        failureRedirect: '/signupFailure',
        failureFlash: true
    }, (req, res) => {
        res.send("Authenticating"); 
    });

    //console.log(req.body);
    res.send('Received');
    
});

router.get('/profile', (req, res) => {
    res.send('This is your profile');
});



module.exports = router;

Passport.authenticate() returns一个中间件函数,你没有调用它。

passport.authenticate('local-signup', {
  successRedirect: '/profile',
  failureRedirect: '/signupFailure',
  failureFlash: true
}, (req, res) => {
  res.send("Authenticating"); 
})(req, res)