Настройка бэкенда аутентификации для нескольких пользователей в Django

Вопрос в том, что у вас есть пользовательский пользователь 'Account' и я пытаюсь использовать Loginview, но только с одним конкретным бэкендом, но класс не заботится о переданном значении.

from django.contrib.auth import views as auth_views
from .lists import ProjectCreateView , ProjectUpdateView , ProjectDeleteView 

class ClientLogin(auth_views.Loginview):
 
    def form_valid(self, form):
        """Security check complete. Log the user in."""
        auth_login(self.request, form.get_user(),'CREA.models.ClientBackend')
        return HttpResponseRedirect(self.get_success_url())


urlpatterns = [
    path('', ClientLogin.as_view(template_name='authentification/client_login.html',
                    redirect_authenticated_user=True,next_page='client-home'), name='client-log-in'),

NB: обратите внимание, что бэкенд работает нормально, если он единственный указан в настройках, но в противном случае loginview использует все бэкенды по очереди, и да, я знаю, что это поведение по умолчанию, но тогда какой смысл в этой переменной в auth_login? вот функция в django :

def login(request, user, backend=None):
"""
  Persist a user id and a backend in the request. This way a user doesn't
  have to reauthenticate on every request. Note that data set during
  the anonymous session is retained when the user logs in.
  """
  session_auth_hash = ""
  if user is None:
      user = request.user
  if hasattr(user, "get_session_auth_hash"):
      session_auth_hash = user.get_session_auth_hash()

  if SESSION_KEY in request.session:
      if _get_user_session_key(request) != user.pk or (
          session_auth_hash
          and not constant_time_compare(
              request.session.get(HASH_SESSION_KEY, ""), session_auth_hash
          )
      ):
          # To avoid reusing another user's session, create a new, empty
          # session if the existing session corresponds to a different
          # authenticated user.
          request.session.flush()
  else:
      request.session.cycle_key()

  try:
      backend = backend or user.backend
  except AttributeError:
      backends = _get_backends(return_tuples=True)
      if len(backends) == 1:
          _, backend = backends[0]
      else:
          raise ValueError(
              "You have multiple authentication backends configured and "
              "therefore must provide the `backend` argument or set the "
              "`backend` attribute on the user."
          )
  else:
      if not isinstance(backend, str):
          raise TypeError(
              "backend must be a dotted import path string (got %r)." % backend
          )

  request.session[SESSION_KEY] = user._meta.pk.value_to_string(user)
  request.session[BACKEND_SESSION_KEY] = backend
  request.session[HASH_SESSION_KEY] = session_auth_hash
  if hasattr(request, "user"):
      request.user = user
  rotate_token(request)
  user_logged_in.send(sender=user.__class__, request=request, user=user)
Вернуться на верх