【问题标题】:Django site framework: How to manage access to different sites sharing same database?Django 站点框架:如何管理对共享同一数据库的不同站点的访问?
【发布时间】:2012-11-28 02:10:29
【问题描述】:

我有两个 Django 站点,它们共享同一个数据库和一些功能。每个站点都有自己的 settings.py 和不同的 SITE_ID。每个站点都在自己的 runserver 进程下运行。

我有这个自定义后端来检查是否允许用户在登录期间访问当前站点:

user_or_none = super(SiteBackend, self).authenticate(**credentials)
if user_or_none and user_or_none.get_profile().sites.filter(id=Site.objects.get_current().id).count() < 1:
    user_or_none = None

如果 SITE_ID 存储在用户的个人资料中(在 auth_user_profile_site 表中),则用户可以访问站点

我的问题是,当用户登录他有权访问的站点之一时,他可以切换到他无权访问的另一个站点,系统让他进入。

另外,一旦登录一个站点,似乎在切换到另一个站点时,从:Site.objects.get_current().id 获得的 SITE_ID 与第二个站点 ID 不对应,我们总是从登录的第一个站点接收 SITE_ID。 .

这是网站框架的正常行为吗?

有什么建议可以解决这些问题吗?

非常感谢

艾蒂安

【问题讨论】:

    标签: django


    【解决方案1】:

    您应该在 django 会话框架中寻找答案。当有人登录时,它会在会话中保存用户 ID。 session 只是一个临时存储(您可以在视图request.session 中访问它)。取决于会话后端,它可以与其他站点交互。

    here

    【讨论】:

    • 会话中间件已经启用...我是否必须针对会话做一些特别的事情才能获得正确的 SITE_ID?为什么 get_current_site(request) 似乎坚持首先登录的站点 ID?
    猜你喜欢
    • 2011-03-22
    • 1970-01-01
    • 2021-02-19
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    相关资源
    最近更新 更多