【问题标题】:Node.js passport local authentication is not calling the middlewareNode.js 护照本地身份验证未调用中间件
【发布时间】:2021-07-05 00:21:13
【问题描述】:

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

当我提交注册表单时,会调用 post signup 函数。我在浏览器中看到“已收到”,但是,我在 passport.use 回调中看不到任何 console.log。

服务器:

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'));
});

护照配置文件(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;

【问题讨论】:

    标签: javascript node.js express passport.js


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-11-06
      • 1970-01-01
      • 1970-01-01
      • 2014-06-22
      • 2016-10-29
      • 1970-01-01
      • 2014-03-17
      • 1970-01-01
      • 2016-10-19
      相关资源
      最近更新 更多