【问题标题】:Users for multiple sites in DjangoDjango 中多个站点的用户
【发布时间】:2018-05-28 19:39:36
【问题描述】:

我试图让多个站点使用相同的数据库和代码,但以强制每个用户对每个站点都有自己的登录的方式。

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

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

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

有人可以帮忙吗?

我非常喜欢数字 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

防止登录到一个站点的人能够使用相同的会话登录到另一个站点。

【问题讨论】:

  • 站点框架,可能需要更多的前期投资,但希望能帮助您避免以后的陷阱。
  • 您的意思是选项 3 - 为每个站点添加一个新的服务器进程并添加各种新的设置文件以获取它们的 SITE_ID 吗?
  • 意思是使用选项1,但我知道我可能误解了你的问题。那个 get_user 函数在哪里?
  • 好的,太好了 - 在这种情况下,我只需要知道如何在 get_user 方法中获取请求 - 有什么想法吗?
  • Site.objects.get_current() 不起作用?

标签: django django-authentication django-sites


【解决方案1】:

我实际上是如何做到这一点的,不是针对用户,而是针对通用数据库,是设计一个具有 REST API 架构的主要隐藏应用程序。我的其他应用程序自然有自己的数据库,并根据需要通过批处理或流处理交换数据。我使用 django-rest-framework。

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

这种架构与许多移动应用所拥有的架构并无太大区别。

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2013-02-02
    • 2012-01-10
    • 2015-01-09
    • 2013-09-21
    • 2012-03-30
    • 1970-01-01
    • 2011-11-24
    • 2011-03-07
    • 2015-02-03
    相关资源
    最近更新 更多