我正在使用带有ForeignKey的用户配置文件模型到用户,由django.contrib.auth验证。
相同的auth模块当然用于管理界面,因此如果超级用户/工作人员登录管理界面并进入主站点,该站点将接受会话cookie并对其进行身份验证。这会产生问题,因为超级用户/管理员不需要具有UserProfile,也不应被主站点识别。
解决此问题的最简单方法是什么,以便来自管理员的会话不会继续访问该网站?
答案 0 :(得分:1)
我认为没有办法解决这个问题, “解决这个问题的最简单方法是什么,以便来自管理员的会话不会继续访问该网站?”
但是根据你要做什么,你可以试试,
如果request.user.is_superuser():
UserProf.objects.create(...)
我一直有这样的问题,我想在开发时同时保持登录管理员用户和登录普通用户。为此,我在/ etc / hosts
中有两个条目 127.0.0.1 uswaretech.tld
127.0.0.1 admin.uswaretech.tld
现在,普通用户总是通过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
这应该位于中间件列表的顶部,以防止可能的副作用。