如何使用app.method()进行授权

时间:2017-11-01 01:33:21

标签: node.js mongodb express authorization saas

我正在尝试使用express next('route'),但我在文档中没有找到关于如何执行此操作的内容,提到here。但它没有解释如何做

  

仅适用于使用app.METHOD()或router.METHOD()函数加载的中间件函数。

我没有得到他们的意思,因为我之前从未使用过app.METHOD(),而且无法找到有关如何使用next('route')正确执行此操作的文档。这会有用吗?

app.method('*', (req, res, next) => {
 if(req.user == null) {
   next();
 } else {
   User.findOne({"_id": req.user.id}, function(err, result) {
    if(err){
     console.log(err);
    } else {
     if(stripe.active == false && stripe.trial == false){
      res.render('/dashboard/billing');
      next('route');
    } else {
      next();
    }
   }
  });
 } 
});

这甚至会起作用吗?我在某处猜测我搞砸了什么。如果我这样做,那么它会找到一个用户,然后检查is_activeis_trial都是假的,如果是,则跳到下一个路线。我这样做的想法是,如果网站的任何部分没有登录用户,那么当有登录用户并且两者都是假时,我只允许他们转到/dashboard/billing。这是向我建议的一种方法,可以防止尚未支付试用的用户访问我的应用程序。

路线我正在测试:

// dashboard
 app.get('/dashboard',
 setRender('dashboard/index'),
 setRedirect({auth: '/login'}),
 isAuthenticated,
 (req, res, next) => {      

 },
 dashboard.getDefault);

1 个答案:

答案 0 :(得分:2)

首先,将方法更改为正确的HTTP方法请求。在文档中,它指定.METHOD()表示的内容:

  

app.METHOD()函数,其中METHOD是请求的HTTP方法   中间件函数处理(例如GET,PUT或POST)   小写。

换句话说,.METHOD()是.get,。post,.put等的占位符。

尝试在您的应用中更改它:

app.get('*', (req, res, next) => {
 if(req.user == null) {
   next();
 } else {
   User.findOne({"_id": req.user.id}, function(err, result) {
    if(err){
     console.log(err);
    } else {
     if(stripe.active == false && stripe.trial == false){
      res.render('/dashboard/billing');
      next('route');
    } else {
      next();
    }
   }
  });
 } 
});

看看你是否可以从那里开始。

<强>更新

在res.render()之后立即调用.next('route')取消res.render(),因为.next('route')会将请求发送到下一个路由器。