Skip to main content

If you are using our backend SDK that is lesser than the following versions, please visit the older documentation link here.

Paid Feature

This is a paid feature.

For self hosted users, Sign up to get a license key and follow the instructions sent to you by email. Creation of tenants is free on the dev license key.

This feature is already enabled for managed service users. Creation of additional tenant is free on the provided development environment.

Creating and configuring a tenant

Step 1: Create a tenant and enable third party login for them#

The first step in setting up a multi tenant login system is to create a tenant in the SuperTokens core. Each tenant has a unique tenantId (a string data type) mapped to that tenant's configuation. The tenantId could be that tenant's sub domain, or a workspace URL, or anything else using which you can uniquely identify them.

The configuration mapped to each tenant contains information about which login methods are enabled for them. You can create a tenant via our backend SDK or via a cURL command to the core. This also allows you to dynamically create tenants without manual intervention:

Step 2: Configure the third party providers for the tenant#

Once you have created a tenant with third party enabled, you need to configure which third party providers to enable for the tenant. We have several in built providers, but you can also configure a custom provider.

Once again, you can add / modify this config dynamically using our backend SDK or using a cURL command.

  • The above code snippet shows how you can add an Active directory login to your tenant. The clientId, clientSecret and directoryId will be provided to you by your tenant.
  • You can see the required information for other providers on this page.
Next steps

You have now successfully configured a new tenant in SuperTokens. The next step is to wire up the frontend SDK to show the right login UI for this tenant. The specifics of this step depend on the UX that you want to provide to your users, but we have two common UX flows documented in the next section.

Providing additional configuration per tenant#

You can also configure a tenant to have different configurations as per the core's config.yaml (or docker env) variabls. Below is how you can specify the config, when creating or modifying a tenant:

Custom tenant config

In the above example, we are setting different values for certain configs for customer1 tenant. All other configs are inherited from the base config (config.yaml file or docker env vars).

The values can be edited by clicking on the pencil icon and then specifying a new value.

caution

Database connection settings cannot be edited directly from the Dashboard and you may need to use the SDK or cURL to update them.

Once you have set the configs for a specific tenant, you can fetch the tenant info as shown below:

import Multitenancy from "supertokens-node/recipe/multitenancy";

async function getTenant(tenantId: string) {

let resp = await Multitenancy.getTenant(tenantId);

if (resp === undefined) {
// tenant does not exist
} else {
let coreConfig = resp.coreConfig;

let firstFactors = resp.firstFactors;

let configuredThirdPartyProviders = resp.thirdParty.providers;
}
}

The returned coreConfig is the same as what we had set when creating / updating the tenant. The rest of the core configurations for this tenant are inherited from the app's (or the public tenant) config. The public tenant, for the public app inherits its configs from the config.yaml / docker env var values.