Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js expressjs简单身份验证-localhost重定向您的次数太多_Node.js_Express - Fatal编程技术网

Node.js expressjs简单身份验证-localhost重定向您的次数太多

Node.js expressjs简单身份验证-localhost重定向您的次数太多,node.js,express,Node.js,Express,我创建了一个函数来检查用户是否经过身份验证,如下所示:- app.use(compression({threshold:1})); app.use(logger('dev')); app.use(session({ secret:'node.js app', resave:false, saveUninitialized:true, cookie:{secure:true} })) app.use(bodyParser.json()); app.use(bodyParse

我创建了一个函数来检查用户是否经过身份验证,如下所示:-

app.use(compression({threshold:1}));
app.use(logger('dev'));
app.use(session({
   secret:'node.js app',
   resave:false,
   saveUninitialized:true,
   cookie:{secure:true}
}))
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
function CheckAuth(req,res,next){
  if(!req.session.authenticated){
   res.redirect('/users/login');
   return;
  }
 next();
}
并用作中间件

app.use(CheckAuth)


但是多次运行的函数会重定向并停止页面加载。

您需要为“/users/login”进行路由,否则您将被重定向回同一位置,并且CheckAuth会在一个无休止的循环中反复调用


您需要为“/users/login”进行路由,否则您将被重定向回同一位置,并且CheckAuth将在一个无休止的循环中反复调用


由于中间件也运行在
/users/login
您应该将其添加到签入中间件函数中

function CheckAuth(req,res,next){
  if(!req.session.authenticated && req.url != '/users/login'){
   res.redirect('/users/login');
   return;
  }
 next();
}

由于中间件也在
/users/login
您应该将其添加到签入中间件函数中

function CheckAuth(req,res,next){
  if(!req.session.authenticated && req.url != '/users/login'){
   res.redirect('/users/login');
   return;
  }
 next();
}

您对所有路由都使用了中间件,因此重定向将永远循环

因此,您需要明确指定需要保护的路由。代码可能是这样的:

//routes without auth guard
app.post('/users/login', login);
app.post('/users/register', register);

//routes guarded by auth
app.get('/api/xxx', CheckAuth, xxx);
app.post('/api/yyy', CheckAuth, yyy);

您对所有路由都使用了中间件,因此重定向将永远循环

因此,您需要明确指定需要保护的路由。代码可能是这样的:

//routes without auth guard
app.post('/users/login', login);
app.post('/users/register', register);

//routes guarded by auth
app.get('/api/xxx', CheckAuth, xxx);
app.post('/api/yyy', CheckAuth, yyy);

很高兴帮助你!很高兴帮助你!