我目前在node.js应用程序中使用express-stormpath进行Stormpath身份验证。我也在使用条纹。我试图弄清楚如何正确存储会话。我打算在用户会话中存储以下内容:
session: {
sp_user: { //stormpath user details }
db_user: { //details from my DB }
stripe_expiraton: '234253843923' // unix timestamp
}
因此,我打算在登录时为用户创建一个为期7天的会话。在每个API调用中,快速中间件都会检查条带到期日期是否到来。如果有,或者没有到期日,则意味着我们需要将用户重定向到付款页面。否则将假定一切正常并已付清并继续进行。
我应该以这种方式存储会话信息吗?我对会话管理不是很熟练。
最佳答案
我建议您将这些信息存储在用户帐户的自定义数据存储中。 Stormpath中的每个帐户都可让您存储所需的任何JSON信息。
这将是一个更好的解决方案,将数据存储在会话中,因为如果只是客户端,用户可能会随时擦除数据。
另外:对于Stripe,在大多数情况下,存储时间戳实际上没有任何意义。通常的计费方式是:
收集用户的帐单信息。
使用其JS API将其发送到Stripe,然后您将获得令牌。
将令牌发送到您的Express应用。
使用该令牌创建一个Stripe客户对象。这样,您可以在将来向用户收费。
将Stripe客户ID存储在Stormpath自定义数据中,这样您就知道以后如何向用户收费!
通过上述流程,您可以在需要时自动向用户收费,而不必始终将他们重定向到付款页面。这也意味着您无需担心会话到期等问题,仅需要在用户的卡已过期或不再有效时将用户重定向到付款页面。
以下是在路线内进行操作的方法:
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);
});
});
});
上面的代码会将您的Stripe客户ID保存在您的Stormpath帐户中。
然后,您可以随时通过以下方式检索此数据:
req.user.getCustomData(function(err, data) {
if (err) return next(err);
data.stripeCustomerId; // this will be the value you've previously stored
});
希望有帮助=)