我正在使用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信息并提醒他们,但遗憾的是,不会全部输入他们的详细信息。我需要能够在审判结束后阻止那些尚未付款的人使用我的服务。如果还有什么我应该添加的请告诉我,我会把它包括在内。