1

我一开始就用这个:

var app = express.createServer(
  express.cookieParser(),
  express.session({ secret: 'somesecretword' })
);

下面的代码是一个示例代码,用于获取以 uname 为键的用户详细信息。

我通过调用 model.fetch() 从主干模型的 url 调用此代码。

app.get('/user/:uname/', function (req, res) {

  var uname=req.params.uname;
  if(!req.session.user)   // check if logged in
  res.send("Not Logged In");

  return UserModel.find({uname : uname},function(err, user) {
    if (!err) {
      return res.send(user);
    } else {
      return res.send(err);
    }
  });
});

所以,这里我直接在上面的get方法中写了验证session的代码。

如果我有很多这样的方法怎么办?我是否必须在每个方法中编写相同的东西,或者 Node 中是否有任何控制器可以做到这一点?

例如,向我展示一个验证路径 "/user" 的控制器,这意味着 "/user/anythinghere/" 应该自动验证或向我展示其他更好的方法。

4

2 回答 2

2

您需要的是某种与 app.get 方法一起传递的中间件。我无法完全重写您的代码块,因为我自己仍在从 Express 文档中学习 Node.js(进行了一些修改以尝试满足您的需求)

function requireAuth(req, res, next) {
  if(req.session.user) {
    next();
  } else {
    next(new Error('Failed to load user ' + req.params.id));
  }
}

app.get('/user/edit/:id', requireAuth, function(req, res){
  res.send('you can see this because you are authed');
});

app.get('/', function(req, res){
  res.send('Not requiring auth on homepage');
});

这里的文档解释得更好,然后我可以:

http://expressjs.com/guide.html#route-middleware

我希望这能有所帮助。:) 如果有的话,我自己刚刚学到了一些新东西来回答这个问题,所以谢谢 :D

于 2012-04-15T11:20:06.733 回答
1

您可以使用中间件并将其放在这样的路由中:

app.get('/user/edit/:id', requireAuth, function(req, res){
  res.send('you can see this because you are authed');
});

或者我所做的是使用通配符这样的事情:

app.all("/api/private*", ensureAuthenticated);

您可以在此处阅读更多信息:https ://fabianosoriani.wordpress.com/2011/08/15/express-api-on-node-js-with-mysql-auth/

于 2012-09-01T01:30:52.577 回答