Не удается добавить промежуточное ПО для маршрута в Express - PullRequest
0 голосов
/ 15 декабря 2018

Я следовал серии руководств по chatApp, используя NodeJs, экспресс и паспорт для аутентификации. Вместо того чтобы использовать app.get (), он использовал совершенно другой способ хранения и доступа к маршрутам.

'use strict';
const h = require('../helpers');
const passport = require('passport');

module.exports=()=>{
    let routes = {
        'get':{
            '/':(req,res,next)=>{
                res.render('login');
            },
            '/rooms':[h.isAuthenticated,(req,res,next)=>{
                res.render('rooms',{
                    user:req.user
                });
            }],
            '/chat':(req,res,next)=>{
                res.render('chatroom');
            },
            '/auth/facebook': passport.authenticate('facebook'),
            '/auth/facebook/callback': passport.authenticate('facebook',{
                successRedirect:'/rooms',
                failureRedirect:'/'
            }),
            '/auth/google': passport.authenticate('google', {
                scope:[
                    'profile'
                ]
            }),
            '/auth/google/callback': passport.authenticate('google',{
                successRedirect:'/rooms',
                failureRedirect:'/'
            }),
            '/logout':(req,res,next)=>{
                req.logout();
                res.redirect('/');
            }
        },
        'post':{

        },
        'NA':(req,res,next)=>{
            res.status(404).sendFile(process.cwd()+'/views/404.htm');
        }
    }

    return h.route(routes);
}

Паспорт используется для аутентификации в Facebook.Всякий раз, когда пользователь нажимает для входа в Facebook, на адрес url / auth / facebook отправляется запрос на получение, а затем перезванивается и перенаправляется на страницу / rooms

'/auth/facebook': passport.authenticate('facebook'),
'/auth/facebook/callback': passport.authenticate('facebook',{
    successRedirect:'/rooms',
    failureRedirect:'/'
}),

До этого все работало нормально.Но я хотел добавить безопасные маршруты. Если пользователь аутентифицирован, он может посетить URL localhost / rooms, иначе мы будем перенаправлены на домашнюю страницу.Итак, я добавил h.isAuthenticated (это еще одна импортируемая функция)

'/rooms':[h.isAuthenticated,(req,res,next)=>{
                res.render('rooms',{
                    user:req.user
                });
            }],

Теперь, когда я нажимаю кнопку входа в систему с помощью facebook, он переходит в / auth / facebook, но вместо аутентификации он отображаетномера страницы и не может загрузить переменные, такие как имя профиля, рис, поэтому он отправляет и ошибка.

Мой вопрос: как мне добавить сюда это промежуточное программное обеспечение, чтобы сначала оно аутентифицировалось и отображало страницу с номерами?

Промежуточное программное обеспечение для проверки того, что пользователь вошел в систему или аутентифицирован

let isAuthenticated = (req,res,next)=>{
    console.log(req.isAuthenticated());
    if(req.isAuthenticated()){
        next();
    }else{
        res.redirect('/');
    }
}
...