Closed 5starkarma closed 4 years ago
Hey how did you solve it?
It all depends on how you want to structure your architecture. In my case it is fine to have tenants and users (auth) all in the shared schema which allows for authentication across all the domains and subdomains.
But wait! I didn't want to have users from one tenant logged in at another tenant! This removes the idea of a multi-tenant architecture (at least in my use-case)!
So I created a middleware that had a line that, if the user is authenticated, grabs the request.user.tenant
as well as request.tenant
and compares them. If they don't match? Redirect them to their tenant subdomain! It works like a charm.
Can you share the settings.py file and the signup/login view? I'm been scratching my head for days trying to solve it
Here you go..
The settings.py:
SHARED_APPS = [
'django_tenants',
'django.contrib.contenttypes',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# more apps
]
TENANT_APPS = [
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
# more apps
]
I am not going to share views because they are project specific. Users create a tenant then you redirect them to that tenant.
I’m having issues getting the user logged in. I can successfully create a tenant from maindomain.com and have the user redirected to tenant.maindomain.com ( and the user is in the correct schema) but I can’t figure out how to get the user -automatically logged in. I tried just doing a login(request, user)
but it gives me a weird cookie error. Did you find a way around it
I didn't have that issue. Fwiw my Tenant registration view and my user registration view are separate. After a tenant is created and the user is redirected to that tenant is where I have them sign up as a user.
Probably worth it to post an issue specific to your problem. People won't see issues here.
Did you find a way to have the user logged in from main domain and be redirected to tenant as a logged in user?
So I created a middleware that had a line that, if the user is authenticated, grabs the request.user.tenant as well as request.tenant and compares them. If they don't match? Redirect them to their tenant subdomain! It works like a charm.
And I suppose you don’t want to share that either..?
i'm stuck on the login part did anyone care to share if they found a workaround?
The application works very nicely but I am wondering about automatic routing tenants to their subdomain from the public schema. e.g. Tenant goes to www.example.com and tries to login, is their any solution in this app that routes them to their subdomain (www.tenant1.example.com)? I am sure this is a rather common question but for some reason I cannot find much on it.
In the docs I see Tenant View-Routing using
PUBLIC_SCHEMA_URLCONF
but I don't really understand exactly what this does. Could you help me understand?I have also thought about using sperate projects for the main website and tenants but then I would still need to either somehow grab the IP address of the user and try to route them to the correct subdomain or to ask them which subdomain they want (which seems inefficient).
So what do people do to solve this issue? I am almost positive there is a simple solution I am not seeing or simply not understanding as these seems like it would be a very common issue.
All help is very much appreciated :)