我目前在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
});


希望有帮助=)

07-24 18:08
查看更多