[PYTHON] Die Funktion _authenticate_with_backend wurde in django auth.autenticate nicht mehr unterstützt

Hintergrund

Aktualisierung der Django-Version von 1.11.1 auf 2.2, Bei der Authentifizierung, die ich selbst angepasst hatte, wurde ein Fehler angezeigt.

Authentifizierung von Django 1.11.1

def authenticate(request=None, **credentials):
    """
    If the given credentials are valid, return a User object.
    """
    for backend, backend_path in _get_backends(return_tuples=True):
        try:
            user = _authenticate_with_backend(backend, backend_path, request, credentials)
        except PermissionDenied:
            # This backend says to stop in our tracks - this user should not be allowed in at all.
            break
        if user is None:
            continue
        # Annotate the user object with the path of the backend.
        user.backend = backend_path
        return user

    # The credentials supplied are invalid to all backends, fire signal
    user_login_failed.send(sender=__name__, credentials=_clean_credentials(credentials), request=request)



def _authenticate_with_backend(backend, backend_path, request, credentials):
    args = (request,)
    # Does the backend accept a request argument? <---Was ist das für ein Kommentar?
    try:
        inspect.getcallargs(backend.authenticate, request, **credentials)
    except TypeError:
        args = ()
        credentials.pop('request', None)
        # Does the backend accept a request keyword argument?
        try:
            inspect.getcallargs(backend.authenticate, request=request, **credentials)
        except TypeError:
            # Does the backend accept credentials without request?
            try:
                inspect.getcallargs(backend.authenticate, **credentials)
            except TypeError:
                # This backend doesn't accept these credentials as arguments. Try the next one.
                return None
            else:
                warnings.warn(
                    "Update %s.authenticate() to accept a positional "
                    "`request` argument." % backend_path,
                    RemovedInDjango21Warning
                )
        else:
            credentials['request'] = request
            warnings.warn(
                "In %s.authenticate(), move the `request` keyword argument "
                "to the first positional argument." % backend_path,
                RemovedInDjango21Warning
            )
    return backend.authenticate(*args, **credentials)

↓ Selbstgemachte Authentifizierung

from django.contrib.auth.backends import ModelBackend
from .models import UserProfile


class SignedRequestBackend(ModelBackend):
    """Implementierung eines Pass-Through-Authentifizierungs-Backends für die separate Authentifizierung"""

    def authenticate(self, user=None, user_profile=None, **kwds):
        if user is None:
            return
        if not user.is_authenticated or not user.is_active:
            return
        if municipality_user_profile is None:
            return
        if not isinstance(user_profile, UserProfile):
            return
        if user.id != user_profile.user_id:
            return
        return user

Django 2.2 authentifizieren

def authenticate(request=None, **credentials):
    """
    If the given credentials are valid, return a User object.
    """
    for backend, backend_path in _get_backends(return_tuples=True):
        try:
            inspect.getcallargs(backend.authenticate, request, **credentials)
        except TypeError:
            # This backend doesn't accept these credentials as arguments. Try the next one.
            continue
        try:
            user = backend.authenticate(request, **credentials)
        except PermissionDenied:
            # This backend says to stop in our tracks - this user should not be allowed in at all.
            break
        if user is None:
            continue
        # Annotate the user object with the path of the backend.
        user.backend = backend_path
        return user

    # The credentials supplied are invalid to all backends, fire signal
    user_login_failed.send(sender=__name__, credentials=_clean_credentials(credentials), request=request)

[Fazit] Die Funktion _authenticate_with_backend wurde abgeschafft.

Ich habe versucht, inspect.getcallargs zu debuggen

[Fehlerursache] ['self', 'user', 'user_profile'] ist args zugewiesen (bitte geben Sie hier ['self', 'request'] ein)

Recommended Posts

Die Funktion _authenticate_with_backend wurde in django auth.autenticate nicht mehr unterstützt
Sortierwarnung in der Funktion pd.concat
Implementierung der Login-Funktion in Django
Wechseln Sie die in Django 1.9 angezeigte Sprache
Holen Sie sich die Abfragezeichenfolge (Abfragezeichenfolge) mit Django
Holen Sie sich die IP-Adresse des Kunden mit Django
Django ~ Lass es uns im Browser anzeigen ~
Nehmen Sie die logische Summe von List in Python (Zip-Funktion)
Es wurde eine Funktion hinzugefügt, um gewünschte Verschiebungen in der Django-Verschiebungstabelle zu registrieren
Versuchen Sie, die Spotify-API in Django zu aktivieren.
Holen Sie sich den Aufrufer einer Funktion in Python
Korrigieren Sie die Argumente der in map verwendeten Funktion
Geben Sie die Ansichts-URL in der Django-Vorlage an
Ich habe versucht, die inverse Gammafunktion in Python zu implementieren
Die Geschichte der Anzeige von Mediendateien in Django
[Django] CSS im Projekt kann nicht gelesen werden
Modell in Django
[Django] Lassen Sie uns versuchen, den Teil von Django zu klären, der im Test irgendwie durch war
Als ich die von Django generierte Abfrage überprüfte, wurde sie in großer Anzahl ausgegeben
Dualität in der Funktion
Form in Django
Lernnotizen für die Migrationsfunktion im Django-Framework (2)
Geben Sie die Zeit ab dem Start des Programms in Python aus
[Django] Tabelle abschneiden (alle Tabellendaten löschen)
Setzen Sie DateField des Formulars in Django auf type = date
Lernnotizen für die Migrationsfunktion im Django-Framework (3)
[Django Rest Framework] Passen Sie die Filterfunktion mit Django-Filter an
Lernnotizen für die Migrationsfunktion im Django-Framework (1)
Die Geschichte, die Japan ausgab, wurde mit Django verwechselt
Was bedeutet das letzte () in einer Funktion in Python?
Es war großartig, die Python-Datei in Raspberry Pi mit der Remote-Funktion von Atom zu bearbeiten
Eine Geschichte, nach der ich süchtig war, als ich in Go nil als Funktionsargument angab