如何跟踪Stripe状态的Stormpath身份validation会话?
我目前在我的node.js应用程序中使用express-stormpath进行stormpath身份validation。 我也使用条纹。 我试图找出如何正确存储会话。 以下是我打算在用户会话中存储的内容:
session: { sp_user: { //stormpath user details } db_user: { //details from my DB } stripe_expiraton: '234253843923' // unix timestamp }
所以在login时,我打算为用户创build一个会话,为期7天。 在每个API调用中,中间件都会检查是否到期。 如果有,或者没有到期date,则意味着我们需要将用户redirect到付款页面。 否则会认为一切正常,并付诸实施。
我应该以这种方式存储会话信息吗? 我不是超级会议pipe理经验。
我build议你做的是将这些信息存储在用户帐户的自定义数据存储中。 Stormpath中的每个帐户都允许您存储所需的任何JSON信息。
这将是一个更好的解决scheme,将数据存储在会话中,因为如果只是客户端,它可能随时被用户擦除。
另外:对于Stripe,在大多数情况下存储时间戳并没有什么意义。 您通常的结算方式是:
- 收集用户的帐单信息。
- 发送到Stripe使用他们的JS API,你会得到一个令牌。
- 将令牌发送到您的快速应用程序。
- 使用该标记创build一个条带客户对象。 这样你可以在将来给用户开账单。
- 将条纹客户ID存储在Stormpath自定义数据中,这样您将知道如何为用户开票!
通过上述stream程,您可以在需要时自动为用户开帐单,而不是一直将其redirect到付款页面。 这也意味着您不必担心会话过期等,只需要将用户redirect到付款页面,如果他们的卡已过期或不再有效。
以下是如何在路线中执行此操作的方法:
app.post('/blah', stormpath.loginRequired, function(req, res, next) { req.user.getCustomData(function(err, data) { if (err) return next(err); data.stripeCustomerId: 'xxx' data.save(function(err) { if (err) return next(err); }); }); });
上面的代码将您的条纹客户ID保存在您的Stormpath帐户。
您随后可以通过以下方式检索这些数据:
req.user.getCustomData(function(err, data) { if (err) return next(err); data.stripeCustomerId; // this will be the value you've previously stored });
希望有帮助=)