【问题标题】:How to use app.method() to do authorization如何使用 app.method() 进行授权
【发布时间】:2017-11-01 01:33:20
【问题描述】:

我正在尝试使用 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);

【问题讨论】:

    标签: node.js mongodb express authorization saas


    【解决方案1】:

    首先,将方法改为正确的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() 取消 res.render() 之后立即调用 .next('route') 因为 .next('route') 会将请求发送到下一个路由器。

    【讨论】:

    • 我把它看得太直接了......该死。其余的看起来还不错吗?我试图让它工作,但我遇到的问题是,当我的页面全部加载时,我无法将用户配置文件中的变量更改为 false。好吧,至少我不知道如何手动操作。
    • 我发现我可以将 && 更改为 || 进行测试,但它似乎仍然可以让我进入我不想要的页面。
    • 如果 stripe.active == false || 你想把用户发送到下一个路由器stripe.trial == false ?
    • 对于测试是的,因为在 14 天结束之前两者都不会是假的,我不想等那么久。我认为 or 是否有效并且也应该。然后我可以在 14 天内回到这个问题,当两者都是错误的以确保它有效时,如果没有修复它,那么当我有一个我需要测试的帐户时。
    • 您能指定哪些页面要让用户访问,哪些不可以吗? “*”也会接受任何请求,对吗?我发布了一个小更新。
    猜你喜欢
    • 1970-01-01
    • 2016-06-06
    • 2019-06-04
    • 2022-07-22
    • 1970-01-01
    • 2018-01-23
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    相关资源
    最近更新 更多