Я следовал серии руководств по 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('/');
}
}