Django中多个站点的用户

时间:2017-12-14 16:28:00

标签: django django-authentication django-sites

我正在尝试让多个网站使用相同的数据库和代码,但这会强制每个用户拥有自己的每个网站的登录信息。

我已经看到了一些关于如何完成这项工作的建议,但我不确定该走哪条路。

我正在使用Sites Framework,使用子域来识别当前站点,所以我根本不使用SITE_ID。

  1. 使用网站框架 - 这个答案(https://stackoverflow.com/a/1405902/1180442)建议使用网站框架来完成,但我遇到了get_user()方法的问题,因为它没有可以访问请求,这是我的网站信息的存储位置。
  2. 为用户使用单独的数据库 - 我真的不确定这个,但我认为这可能会导致更大的问题。
  3. 更改为使用SITE_ID - 我想尽可能避免这种情况,因为这意味着必须运行我的应用的许多不同实例,每个网站一个,使用它自己的settings.py 。我想,这很快就会变成一场噩梦。
  4. 权限 - 我想知道这是否应该是我使用权限框架的东西?那么所有网站的一组用户,但每个用户都可以拥有查看每个网站的权限,只要他们已经在该网站注册了?
  5. 任何人都可以帮忙吗?

    我非常喜欢数字1的想法,但我只需要在get_user()方法中获取请求,这样我就可以做到这一点

    def get_user(self, user_id):
            try:
                # I can't do this because there is no request available here
                return User.objects.get(pk=user_id, site=request.site)
            except User.DoesNotExist:
                return None
    

    阻止登录到一个站点的用户使用同一会话登录到另一个站点。

1 个答案:

答案 0 :(得分:0)

我是如何实际操作的,不是为了用户而是为了常见的数据库,是设计一个带有REST API架构的主要隐藏应用程序。我的其他应用程序自然拥有自己的数据库,并根据需要通过批处理或流处理交换数据。我使用django-rest-framework。

对于您的情况,我要做的是每当用户发出登录请求时,我会通过HTTPS将其发送到我的主数据库并在我的主应用程序中进行身份验证。每当我需要验证用户状态时,我只需向主应用程序发出get请求。

这种架构与许多移动应用程序没有什么不同。

我希望它有所帮助。