8

認証されていないユーザーからページを保護するには、ルート内にこのコードを配置するだけで十分ですか?

if (!req.user) return res.send(401, "Not allowed in");
4

3 に答える 3

27

req.isAuthenticated()リクエストが認証されているかどうかを確認するために使用できます。

function ensureAuthenticated(req, res, next) {
  if (req.isAuthenticated()) { return next(); }
  res.redirect('/login')
}

app.get('/server', ensureAuthenticated, routes.server.get);
app.get('/login', routes.login.get);

または、このように

app.all('*', function(req,res,next){
  if (req.path === '/' || req.path === '/login')
  next();
  else
  ensureAuthenticated(req,res,next);  
});
于 2013-07-20T05:52:43.783 に答える
3

どこかにルートを漏らさない限り、それで十分です。ルートが正しい順序になっていることを確認してください。

//checks to be sure users are authenticated
app.all("*", function(req, res, next){
  if (!req.user) 
    res.send(403);
  else
    next();
});
//additional routes will require authentication due to the order of middleware
app.get("/admin", .... 

ただし、管理ルートをグローバル ルートの上に移動すると、管理ルートは保護されなくなります。たとえば、認証を必要としないように、意図的にログインページを前に配置したい場合があります。

于 2013-07-20T05:22:30.617 に答える
2

user568109 の回答の修正。express 4 の場合、コードは次のようになります。

app.all('*', function(req,res,next) {
  if (req.path === '/' || req.path === '/login')
    next();
  else
    ensureAuthenticated(req,res,next);  
});
于 2016-04-14T09:52:56.720 に答える