django.contrib.auth:如何保持站点和管理会话分开?

时间:2009-07-27 11:14:43

标签: django django-admin

我正在使用带有ForeignKey的用户配置文件模型到用户,由django.contrib.auth验证。

相同的auth模块当然用于管理界面,因此如果超级用户/工作人员登录管理界面并进入主站点,该站点将接受会话cookie并对其进行身份验证。这会产生问题,因为超级用户/管理员不需要具有UserProfile,也不应被主站点识别。

解决此问题的最简单方法是什么,以便来自管理员的会话不会继续访问该网站?

3 个答案:

答案 0 :(得分:1)

我认为没有办法解决这个问题, “解决这个问题的最简单方法是什么,以便来自管理员的会话不会继续访问该网站?”

但是根据你要做什么,你可以试试,

  1. 不为超级用户创建UserProfile
  2. 如果request.user.is_superuser():
          UserProf.objects.create(...)

    1. 我一直有这样的问题,我想在开发时同时保持登录管理员用户和登录普通用户。为此,我在/ etc / hosts

      中有两个条目

      127.0.0.1 uswaretech.tld
      127.0.0.1 admin.uswaretech.tld

    2. 现在,普通用户总是通过uswaretech.tld和admin总是通过admin.uswaretech.tld登录,这样你就可以同时登录。

答案 1 :(得分:0)

if request.session.get ('has_account', False):
    return HttpResponse ("You have no account, sorry.")

然后确保您的前端的每个用户在启动会话时获得正确设置的值has_account

答案 2 :(得分:0)

从设计的角度来看,你的想法似乎有点像黑客,但如果你真的想这样做,你可以使用中间件。

class MyMiddleware(object):
    def process_request(self, request):
        if request.user.is_authenticated:
            try:
                UserProfile.objects.get(user=request.user)
            except UserProfile.DoesNotExist:
                from django.contrib.auth.models import AnonymousUser
                request.user = request._cached_user = AnonymousUser()
        return None

这应该位于中间件列表的顶部,以防止可能的副作用。