NodeJS 身份验证中间件适用于我的app.js文件中的所有路由,即使我只应用了一个路由

ddarikpa  于 2023-06-22  发布在  Node.js
关注(0)|答案(1)|浏览(94)

我创建了一个requireAuth中间件并将其导入到app.js,在app.js中,我还从routes文件夹导入了所有路由。在每个route.js文件中,我有多个链接路由。当我在其中一个文件中使用auth中间件时,它应该只应用于route.js文件中的那些路由,而不是应用于我的整个应用程序。
这是我的中间件-

const jwt = require('jsonwebtoken');
const { User } = require('../models/users');

const requireAuth = (req, res, next) => {
  const token = req.cookies.jwt;

  //check json web token exists & is verified
  if (token) {
    jwt.verify(
      token,
      '***********',
      (err, decodedToken) => {
        if (err) {
          res.redirect('/login');
        } else {
          next();
        }
      }
    );
  } else {
    res.redirect('/login');
  }
};
module.exports = requireAuth;

这是我的app.js文件-enter image description here

//Authentication routes
const userAuth = require('./routes/authRoute');

//importing all routes
const homeRoutes = require('./routes/home');
const profile = require('./routes/profile');
const seoRoute = require('./routes/seo');
const semRoutes = require('./routes/sem');
const nptelRoutes = require('./routes/nptel');

app.use('/', userAuth);
app.use('/', homeRoutes);
app.use('/', projectRoute);
app.use('/', profile);
app.use('/', seoRoute);
app.use('/', requireAuth, nptelRoutes);

所以你可以看到,我只将requireAuth中间件应用到最后一条路由上,但它应用到我应用程序中的所有路由上。nptelRoutes内部有多个路由,我希望它能在nptelRoutes内部的所有路由上工作。例如/nptel、/nptel/answer、/nptel/videos

xghobddn

xghobddn1#

基于此,app.use()方法将指定的中间件函数挂载或放置在指定的路径上。只有当请求路径的基与定义的路径匹配时,才会执行此中间件功能。”
由于您对所有路由使用相同的路径,因此中间件将应用于相同路径的所有路由。
您必须区分路由路径以使它们保持分离,如下所示:

app.use('/', userAuth);
app.use('/home', homeRoutes);
app.use('/project', projectRoute);
app.use('/profile', profile);
app.use('/seoRoute', seoRoute);
app.use('/nptel', requireAuth, nptelRoutes);

相关问题