Я новичок в Node.js. На самом деле я делаю свой первый учебник по приложению. Я пытаюсь использовать локальную аутентификацию по паспорту. Согласно руководству и паспортному документу все кажется простым, но по какой-то причине, когда я вызываю паспорт .authenticate, промежуточное ПО не запускается. Просто ничего не происходит.

Когда я отправляю форму подписки, вызывается функция пост-подписки. Я получил сообщение «Получено» в моем браузере, однако я не вижу ни одного 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'));
});

Конфигурационный файл паспорта (lib / паспорт.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;
0
Rober 9 Апр 2021 в 08:47

1 ответ

Лучший ответ

Passport.authenticate () возвращает функцию промежуточного программного обеспечения, вы не вызываете ее.

passport.authenticate('local-signup', {
  successRedirect: '/profile',
  failureRedirect: '/signupFailure',
  failureFlash: true
}, (req, res) => {
  res.send("Authenticating"); 
})(req, res)
1
IAmDranged 9 Апр 2021 в 06:21