Simple database router that helps to split your main database and authentication database. This may be necessary when splitting a project into microservices. Let's say you have some Django project and want to split it into microservices. But all of your microservices need to use the same authentication database. This router will help you to do that.
Which apps are routed to auth_db
database?
contenttypes
sites
auth
admin
flatpages
redirects
auditlog
sessions
Models of these apps are routed to auth_db
database.
These apps are hardcoded in ms_auth_router.routers.DefaultRouter
.
List can be extended by adding ROUTE_APP_LABELS
setting.
If you know that some reusable Django apps should be routed to
auth_db
database, please create an issue or pull request.
Add ms_auth_router
to your INSTALLED_APPS
setting like this:
INSTALLED_APPS = [
...,
'ms_auth_router',
...
]
Add DATABASE_ROUTERS
setting in settings.py
file or append to existing list:
DATABASE_ROUTERS = [
'ms_auth_router.routers.DefaultRouter',
...
]
Add auth_db
section to DATABASES
:
DATABASES = {
...
'auth_db': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'auth.sqlite3',
},
...
}
Finally, add AUTH_DB
setting:
AUTH_DB = 'auth_db'
Without this setting router will use default
db connection.
Note: To get session authentication working between microservices, the
SECRET_KEY
setting must be the same in all microservices.
If you're using custom auth app and want it to be routed to auth_db
database,
you need to add ROUTE_APP_LABELS
setting:
ROUTE_APP_LABELS = ['my_custom_auth_app', ]