我正在使用带有Express和connect-auth的node.js来认证用户。
这是在请求/索引时的验证:
if(req.isAuthenticated()) { res.redirect('/dashboard'); } else { res.render('index',{ layout: 'nonav' }); }
然而,退出并返回到f.e. ‘/ dashboard’,我可以看到仪表板。
如何对每个请求进行身份验证检查,以确保始终有有效的用户?
更新
我没有任何问题的身份验证,一切正常!我需要一个解决方案,如果有一个有效的用户,检查每个路由/请求,而不会在路由实现中放置一个函数或if语句,因为整个App需要一个有效的用户。 Express-Authentication-Example在路由定义中使用“restrict”,这是接近的,但是很多路由可以很容易地被遗忘。
解决方法
app.all('*',function(req,res,next){ if(req.isAuthenticated()){ next(); }else{ next(new Error(401)); // 401 Not Authorized } }); // NOTE: depending on your version of express,// you may need to use app.error here,rather // than app.use. app.use(function(err,req,next){ // Just basic,should be filled out to next() // or respond on all possible code paths if(err instanceof Error){ if(err.message === '401'){ res.render('error401'); } } });
如果在需要身份验证的路由之前和没有(如主页,登录等)的路由之后定义所有路由,则只应影响需要路由的路由。或者,您可以使用RegExp而不是’*’,这将包括一个子路径或需要身份验证的路径列表。
function IsAuthenticated(req,next){ if(req.isAuthenticated()){ next(); }else{ next(new Error(401)); } } app.get('/login',next){ res.render('login'); }); app.get('/dashboard',IsAuthenticated,next){ res.render('dashboard'); }); app.get('/settings',next){ res.render('settings'); });