只有经过身份验证的用户才能访问节点护照路由

时间:2019-02-25 15:39:46

标签: node.js passport.js

我正在尝试保护某些路由,以便只有经过身份验证的用户才能访问它们。我正在使用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');
}); 

0 个答案:

没有答案