0

我正在尝试学习如何使用stormpath和express节点制作多租户应用程序。这是关于该主题的官方文档。至于现在我正在使用express-stormpath库来进行登录和其他操作。但我找不到我是如何做多租户的。

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

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
    }
  )
);
4

1 回答 1

1

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
        })
    }
})
于 2015-12-18T00:35:00.930 回答