我正在尝试保护某些路由,以便只有经过身份验证的用户才能访问它们。我正在使用passport.js进行身份验证。
在我的index.js文件中,我具有以下路线,我只想将其提供给经过身份验证的用户使用(以后将进行其他检查以确保授权)。
const { ensureAuthenticated } = require('../config/auth');
const adminContlr = require('../controllers/admins');
const editProduct = adminContlr.editProduct
router.get('/products/edit/:id', editProduct);
在管理员控制器中
// get the edit form
module.exports.editProduct =
(req , res , next) => {
let id = req.params.id;
// do stuff
};
在config / auth.js中,我有一个帮助程序功能来检查用户是否已通过身份验证。
module.exports = {
ensureAuthenticated: function (req, res, next) {
// isAuthenticated comes from passport
if (req.isAuthenticated) {
return next();
}
req.flash('error', 'Please login');
res.redirect('/login');
}
}
在大多数示例中,我已经看到他们在下面执行类似的操作。
router.get('/admin', ensureAuthenticated, (req, res) => {
res.render('admins', { title: "Admin" });
});
但是由于我的功能与我的路由不在同一个文件中,因此它似乎无法正常工作。
router.get('/products/edit/:id', ensureAuthenticated, editProduct);
我想我可以在所有要确保在检查req.isAuthenticated的地方的路由函数中添加类似的内容,但是我希望通过使用辅助函数来寻求一种更简单的方法。
if (req.isAuthenticated) {
// do stuff
} else {
req.flash('error', 'Please login');
res.redirect('/login');
}
更新 我想知道auth.js是否有些问题,因为当我像这样使用它时,它甚至无法工作
router.get('/admin', ensureAuthenticated, (req, res) => {
res.render('admin');
});