Stormpath 多租户快递

Stormpath multi-tenant express

我正在尝试学习如何使用 stormpath 和 express 节点制作多租户应用程序。这是 official document on that topic. As for now i am using express-stormpath 库,用于创建我的登录名和其他内容。但是我找不到如何做多租户。

更新 我让它与护照风暴路径策略一起使用。我不知道这是否是正确的方法,但它有效......现在的问题是我如何在快速版本中更改 accountStore 动态?感觉一个public声明的变量不太好?

var href = {
  href: null
}

function hrefUrl(req, res, next){
  var host = req.headers.host;
  var account = host.split(".")[0];

  spClient.getDirectories(function (err, directories) {
    directories.each(function (dir, cb){
      if(account.toLowerCase() == dir.name.toLowerCase()){
        href.href = dir.href
      }
      cb();
    }, function (err){
      if(href.href == null){
        return res.redirect(301, 'http://dashboard.local.dev/selectCompany');
      }
      next();
    });
  });
}

// Authenticate a user.
router.post('/login', hrefUrl, passport.authenticate('stormpath',
    {
      successRedirect: '/dashboard',
      failureRedirect: '/login',
      failureFlash: 'Invalid email or password.',
      accountStore: href
    }
  )
);

Express-stormpath 已提供API 供您访问应用程序中的帐户信息。这些帐户属于目录。从官方文档来看,你有两种解决方案来支持多租户。一种是为每个租户创建组,另一种是为每个租户创建目录。

对于您选择的任一解决方案,您都必须使用 express-stormpath 提供的 API 来访问这些与帐户关联的信息。

例如,如果您为每个租户创建了不同的目录,您可能需要在 postLoginHandler.

中添加与多租户相关的业务逻辑
app.use(stormpath.init(app, {
    postLoginHandler: function (account, req, res, next) {
        account.getDirectory(function(err, directory) {
            console.log(directory)
            // if directory is tenant-1
            // if directory is tenant-2
        })
    }
})