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
ユーザーのログインを許可するために使用しています。私は何が欠けていますか?