0

ストームパスを使用してマルチテナント アプリを作成し、エクスプレスを使用してノードを作成する方法を学習しようとしています。これは、そのトピックに関する公式文書です。今のところ、 express-stormpath lib を使用してログインなどを行っています。しかし、マルチテナントを行う方法が見つかりません。

更新 パスポートストームパス戦略で動作するようになりました。それが正しい方法かどうかはわかりませんが、機能します...問題は、エクスプレスバージョンで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 を提供しています。これらのアカウントはディレクトリに属しています。公式ドキュメントによると、マルチテナントをサポートする 2 つのソリューションがあります。1 つはテナントごとにグループを作成する方法で、もう 1 つはテナントごとにディレクトリを作成する方法です。

どちらのソリューションを選択しても、アカウントに関連付けられたこれらの情報にアクセスするには、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 に答える