expressjs简单身份验证 - localhost重定向了你太多次了

时间:2017-07-18 07:45:18

标签: 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(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);

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

3 个答案:

答案 0 :(得分:1)

您需要路由'/ users / login',否则您将被重定向回同一个地方,并且无限循环地反复调用CheckAuth。

https://expressjs.com/en/guide/routing.html

答案 1 :(得分:1)

您需要进行多次重定向,因为中间件也在/users/login中运行 您应该将其添加到您的中间件功能检查中。

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

答案 2 :(得分:1)

您将中间件用于所有路由,以便重定向永远循环。

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

//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);