@Andreeyyy
Web программист

Почему passport.js не использует passport.use?

При аутентификации пользователя через passport он сразу выдает failureRedirect (61 строка), минуя middleware (36 строка), т.е. не использует LocalStrategy.

const consolidate = require('consolidate');
const bodyParser = require('body-parser');
const path = require('path');
const mongoose = require('mongoose');
const session = require('cookie-session');
const passport = require('passport');

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

const Task = require('./models/task');

mongoose.connect('mongodb://127.0.0.1', {
        useNewUrlParser: true,
        useUnifiedTopology: true,
    }, (err) => {
    err ? console.error(err) : console.log('[+] База подключена!');

    /* Settings */
    app.engine('hbs', consolidate.handlebars);
    app.set('view engine', 'hbs');
    app.set('views', path.join(__dirname, 'views'));
    app.use(express.static(path.join(__dirname, 'static')));

    /* Authorisation */
    app.use(session({ keys: ['*1hF5l07%4f@kBFj'] }));

    app.use(bodyParser.urlencoded({extended:true}));
    app.use(bodyParser.json());

    app.use(passport.initialize({}));
    app.use(passport.session({}));

    const LocalStrategy = require('passport-local').Strategy;

    passport.use('local', new LocalStrategy({}, (username, password, done) => {
        console.log('params: ', username, password);
        if (username !== 'admin') {
            console.log('invalid username');
            return done(null, { name: 'Vasya', id: 1});
        }
        if (password !== 'admin') {
            console.log('invalid password');
            return done(null, { name: 'Vasya', id: 1});
        }
        console.log('done!');
        return done(null, { name: 'Vasya', id: 1});
    }));


    /* Session */
    passport.serializeUser((user, done) => done(null, user.id));

    passport.deserializeUser((id, done) => {
        done(null, { name: 'Vasya', id})
    });

    /* Authentication */
    const auth = passport.authenticate('local', {
        successRedirect: '/main',
        failureRedirect: '/login?message=err',
    });

    app.get('/login', (req, res) => {
        if (req.query.message === 'err') {
            res.render('login', { message: 'Неверный логин или пароль!' });
        } else {
            res.render('login', { message: '' });
        }
    });

    app.post('/login', auth);

    const mustBeAuth = (req, res, next) => {  // Is user authenticated
        console.log('isAuth', req.isAuthenticated());
        if (req.isAuthenticated()) { next(); }
        else { res.redirect('/login'); }  // Else redirect to login page
    }

    app.all('/main', mustBeAuth);
    app.all('/main/*', mustBeAuth);

    app.get('/', (req, res) => {
        res.redirect('/main');
    });

    app.get('/main', (req, res) => {
       res.send('ok');
    });

    /* Start the server! */
    app.listen(8888, (err) => {
        err ? console.error(err) : console.log('[+] Сервер поднят!');
    });
});
  • Вопрос задан
  • 32 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
01 дек. 2020, в 23:18
80000 руб./за проект
01 дек. 2020, в 22:41
60000 руб./за проект
01 дек. 2020, в 21:24
500 руб./за проект