0

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

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

我正在使用站点框架,使用子域来识别当前站点,所以我根本不使用 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

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

4

1 回答 1

0

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

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

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

我希望它有所帮助。

于 2017-12-14T17:49:11.323 回答