【发布时间】:2018-05-28 19:39:36
【问题描述】:
我试图让多个站点使用相同的数据库和代码,但以强制每个用户对每个站点都有自己的登录的方式。
我已经看到了一些关于如何完成这项工作的建议,但我不确定该走哪条路。
我正在使用站点框架,使用子域来识别当前站点,所以我根本不使用 SITE_ID。
- 使用站点框架 - 这个答案 (https://stackoverflow.com/a/1405902/1180442) 建议使用站点框架来执行此操作,但我在使用 get_user() 方法时遇到了问题,因为它无法访问请求,这就是我的网站信息的存储位置。
- 为用户使用单独的数据库 - 我真的不确定这个,但我认为它可能会导致更大的问题。
- 改为使用 SITE_ID - 如果可能,我想尽量避免这种情况,因为这意味着必须运行我的应用程序的许多不同实例,每个站点一个,它使用自己的 settings.py。我认为这很快就会变成一场噩梦。
- 权限 - 我想知道这是否应该是我获得权限框架使用的东西?那么所有网站的一组用户,但每个用户都可以拥有查看每个网站的权限,只要他们已经在该网站上注册?
有人可以帮忙吗?
我非常喜欢数字 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