如果试用结束但没有付费订阅,如何阻止用户

时间:2017-10-23 22:05:54

标签: node.js mongodb express stripe-payments middleware

我正在使用stripe-webhook-middleware来处理我的Stripe订阅交易。我目前拥有它,因此用户可以从/billing页面选择他们的计划,然后该计划是14天免费试用。所有这一切都很好,但我想知道如何做到这一点,以便当他们登录时,如果他们的14天已经用完并且他们没有添加他们的CC详细信息,他们就无法访问/billing页面以外的任何内容然而。我使用passport-local作为我的身份验证策略。这是我的登录检查代码:

exports.isAuthenticated = function(req, res, next) {
  if (req.isAuthenticated()){
    return next();
  }

  res.redirect(req.redirect.auth);
};

然后在我希望用户被强制登录的每条路线上调用。

这就是我从上面调用中间件的方式:

var stripeWebhook = new StripeWebhook({
  stripeApiKey: secrets.stripeOptions.apiKey,
  respond: true
});

我通过执行plans[user.stripe.plan].name来访问计划名称,并通过执行plans[user.stripe.plan].name来访问其CC的最后4个数字,但这些数字位于我的视图模板中。您可以使用currentUser作为参考访问我应用中的任意位置的用户帐户。我不熟悉Stripe和webhooks,我可以使用/学习的一些示例代码或代码会很棒。哎呀,即使把我指向正确的方向也不错。

我的注册代码只是超级基本,用户从代码中的其他位置分配了“免费”计划(现在无法在移动设备上找到它)

exports.postSignup = function(req, res, next){
  req.assert('email', 'Please sign up with a valid email.').isEmail();
  req.assert('password', 'Password must be at least 6 characters long').len(6);

  var errors = req.validationErrors();

  if (errors) {
    req.flash('errors', errors);
    req.flash('form', {
      email: req.body.email
    });
    return res.redirect('/signup');
  }
  // calls next middleware to authenticate with passport
  passport.authenticate('signup', {
    successRedirect: '/dashboard', // Select redirect for post signup
    failureRedirect: '/signup',
    failureFlash : true
  })(req, res, next);
    next();
};

我确实计划针对我的数据库运行cron作业,以便我可以告诉用户仍然需要输入他们的CC信息并提醒他们,但遗憾的是,不会全部输入他们的详细信息。我需要能够在审判结束后阻止那些尚未付款的人使用我的服务。如果还有什么我应该添加的请告诉我,我会把它包括在内。

0 个答案:

没有答案