多个Django应用程序,共享身份验证

用户名

该问题的两个答案,取决于共享是在不同站点之间还是在不同子域中进行共享第二个答案:多个Django应用程序,共享身份验证

用户访问site1.com并登录。现在,如果他访问site2.com,则该用户应该已经在该站点登录(通过身份验证)。

site1.com和site2.com由同一服务器上的不同Django应用程序处理。

我知道这些站点可以共享包含身份验证表的数据库。我没有得到的是如何处理会话数据。登录到site1后,用户将转到site2。在这里,他始终具有request.user =“ AnonymousUser:AnonymousUser”而不是user_id。

我已经将其设置为:https : //docs.djangoproject.com/en/dev/topics/db/multi-db/

site1的设置只有一个数据库,其中包含auth模型以及其他一些数据表。site2的设置有2个数据库。一个有自己的数据表,还有一个由user1使用的数据表。实际上,我复制了AuthRouter类并设置了数据库路由器。

我想做的事不可能吗?我实际上不了解这两个站点如何共享会话数据。在Django之外,我是否需要特殊的东西?还是应该工作?我可以在这里包含我的代码,但是如果我的基本想法是错误的,则不要混淆这个问题。

编辑:这是我的设置。我正在localhost上尝试此操作。

Site1在localhost:8080上运行

site2在localhost:8000上运行

SITE2 APP:

db_router.py:

class AuthRouter(object):
    def db_for_read(self, model, **hints):
        if model._meta.app_label == 'auth':
            return 'the_ui'
        return None
    # same for write

    def allow_syncdb(self, db, model):
        if db == 'the_ui':
            return model._meta.app_label == 'auth'
        elif model._meta.app_label == 'auth':
            return False
        return None

class OtherRouter(object):
    def db_for_read(self, model, **hints):
        return "default"
    # same for write, relation, syncdb

settings.py:

DATABASE_ROUTERS = ['site2_app.db_router.AuthRouter', 'site2_app.db_router.OtherRouter']
SESSION_COOKIE_DOMAIN = 'http://localhost:8080'
SESSION_ENGINE = "django.contrib.sessions.backends.signed_cookies"

DATABASES = {
    'default': {
        # ...
    },
    'the_ui': {
        # ...
    }
}

网站1 APP:

# no router
# only single database, same as the "the_ui" used in site2
SESSION_ENGINE = "django.contrib.sessions.backends.signed_cookies"
Sudipta

如您所说,这两个站点可以通过共享数据库或在各自数据库之间同步Users表来使用相同的身份验证数据。

这将确保site1.com的任何用户都将自动成为site2.com的成员,反之亦然。

但是您的要求-任何登录site1.com的用户都应该自动登录site2.com有点棘手。您真正需要的是单一登录(SSO)。

为什么它不能仅仅通过共享数据库(包括会话数据)来实现是因为site2.com不能获得对由于浏览器通过site1.com访问设置Cookie跨域问题。

有许多使用Django的SSO解决方案。看看这个SO问题。尽管我从未使用过它,但Django-openid似乎是一个不错的选择。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

多个 .NET 应用程序共享身份验证

使用多个应用程序处理 django 身份验证

如何在多个 Symfony 应用程序(相同的数据库,多个内核)之间共享身份验证?

Django 在“身份验证”应用程序中缺少迁移

如何查询经过身份验证的Django应用程序?

在 django 应用程序中集成 ebay 身份验证

应用程序的身份验证概念

如何在两个 asp.net 应用程序之间共享身份验证

如何与Windows服务应用程序共享MVC 5 Identity 2.0身份验证(esp SignInManager)?

使用Django会话身份验证通过angular4应用程序实现中央身份验证系统

由多个Web应用共享的restapi的身份验证

在闪亮的应用程序和多个页面中进行身份验证

用于多个应用程序的OWIN身份验证服务器

多个Blazor Server应用程序和Azure身份验证注销问题

使用 Xero 的 Java SDK 来支持多个私有应用程序的身份验证?

在多个应用程序上进行SSO和REST Api身份验证

对耳内的多个Web应用程序使用一种身份验证

跨多个 Django 站点共享身份验证

OneDrive 文件的守护程序应用程序身份验证

无法在 django 的内置身份验证应用程序中删除用户

Django Rest Framework + Angular.js Web应用程序中的用户身份验证

Django应用程序的DB用户在AWS中身份验证失败

如何将 BIGGERkeysses 禁用到在 django 中构建的身份验证应用程序中?

Tomcat身份验证和特定的Web应用程序身份验证

使用OAuth对EWS应用程序进行身份验证

在Java应用程序中使用NTLM身份验证

Spring Boot应用程序中的LDAP身份验证

Mesibo 本地应用程序令牌身份验证错误

使用应用程序身份验证时的KustoServiceError