4

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.backenduser、属性バックエンドがありません... request.session._auth_user_backendDjangoテンプレートシステムが「変数と属性がアンダースコアで始まらない可能性がある」と文句を言うため、セッションから読み取ることができません(を使用)。

django.contrib.auth.views.loginユーザーのログインを許可するために使用しています。私は何が欠けていますか?

4

3 に答える 3

2

このbackend属性はuser、ユーザーが関数を使用して認証するときにオブジェクトに 追加されdjango.contrib.auth.authenticate(username='foo',password='bar')ます。

AUTHENTICATION_BACKENDSこの関数は、ファイルで指定したすべてを順番に呼び出しsettings.py、そのうちの 1 つを使用して正常に認証できるようになります。

ユーザーが「ログイン」しているがbackend属性を持っていない場合、おそらく適切に認証していないことを意味します。SFIUserBackend.authenticate関数を呼び出す必要があるときに、関数を直接呼び出している可能性がありdjango.contrib.auth.authenticateますか?

これらのカスタム認証ドキュメントを確認してください。

于 2011-05-03T22:21:08.980 に答える
0

ビューでそれを読み取り、そのクラス名の適切な人間の形をメッセージとして送信する必要があります。

于 2011-02-17T05:57:52.407 に答える
0

属性を追加authenticate()してセッションに保存している間、何らかの理由でそれをユーザーに追加しません。パッチを提出しました。user.backendlogin()get_user()

したがって、別のリクエストでアクセスするには、 が必要request.session[django.contrib.auth.BACKEND_SESSION_KEY]です。

また、使いやすいように、カスタム タグを作成したり、コンテキストに (任意の名前で) 追加したりすることもできます。

于 2018-05-09T13:15:59.343 に答える