如何使Express路由默认需要验证?

时间:2015-11-01 19:27:29

标签: javascript node.js express

我已经看到很多关于如何将身份验证中间件添加到需要限制为登录用户的某些路由的示例(暗示默认是允许任何人访问页面),但我可以&#39 ; t告诉我们默认情况下如何使所有路由都需要登录,并有选择地选择匿名用户应该使用的路由。

任何让它像这样工作的方法?我使用Express 4。

1 个答案:

答案 0 :(得分:0)

一旦用户通过身份验证,我会使用:https://github.com/expressjs/session然后您可以检查控制器中处理快递路径的有效会话。

更新了答案

我将如何记录控制用户

/**
 * Module dependencies
 */

var express = require('express'),
  http = require('http'),
  session = require('express-session'),
  app = module.exports = express();

/**
 * Configuration
 */

// all environments
app.set('port', process.env.PORT || 3000);
app.set('trust proxy', 1);
app.use(session({
  secret: 'keyboard cat',
  resave: false,
  saveUninitialized: true,
  cookie: {
    secure: true
  }
}));


function checkUserLoggedIn(req, res, next) {
  return req.session;
}
/**
 * Routes to control by default is logged in with a regular expression
 */
app.get('/user/:use_id/*', function (req, res, next) {
  if (checkUserLoggedIn(req)) {
    console.log('User logged');
    next();
  } else {
    console.log('error');
  }
});
/**
 * User Home
 */
app.get('/user/:use_id/home/', function (req, res, next) {
  if (checkUserLoggedIn(req)) {
    console.log('User logged goes to home');
    next();
  } else {
    console.log('error');
  }
});


/**
 * Home for user that is actually logged
 */
app.get('/guest/dashboard', function (req, res, next) {
  console.log('This is guest dashboard');
});

/**
 * Home for user that is actually logged
 */
app.get('/guest/home', function (req, res, next) {
  console.log('This is guest home');
});


/**
 * Start Server
 */
http.createServer(app).listen(app.get('port'), function () {
  console.log('Express server listening on port ' + app.get('port'));
});

然后运行

$ node app.js

转到浏览器并访问http://localhost:3000/home

您定义的正则表达式用于控制' / *'获取所有默认路由,然后转到匹配的下一个路径,即/ home。

这是一种方法,可能有更好,更清晰的方法来解决问题。在正则表达式中,您可以控制默认路由的含义以及特定的每种情况。