【发布时间】:2011-06-28 20:43:00
【问题描述】:
我在 Django 中使用自定义身份验证后端,从旧系统自动创建和登录用户。我的Backend 班级是这样的:
from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.models import User
from sfi.models import Employee
import base64, hashlib
class SFIUserBackend(ModelBackend):
def authenticate(self, username=None, password=None):
if not username or not password:
return
digest = base64.standard_b64encode(hashlib.md5(password).digest())
user = None
try:
employee = Employee.objects.get(login=username, passwd=digest)
user, created = User.objects.get_or_create(username=username)
if created:
# setting attributes
user.first_name = employee.names[:30]
user.last_name = employee.surnames[:30]
user.is_staff = True
user.save()
except Employee.DoesNotExist:
pass
return user
到目前为止,它运行良好。但是,我需要在模板中读取当前登录用户的后端类。
使用request.user.backend 表示user 没有属性后端...并且我无法从会话中读取它(使用request.session._auth_user_backend)因为Django 模板系统抱怨“变量和属性可能不是以下划线”。
我使用django.contrib.auth.views.login 来允许用户登录。我错过了什么?
【问题讨论】:
-
顺便说一句,这个身份验证方案看起来真的不安全。
标签: python django django-admin django-authentication django-contrib