Sobes.tech
Middle
226

Kuidas töötab Django autentimissüsteem?

Vastus AI-lt

sobes.tech AI

Django autentifikācija balstās uz pievienotu aizmugures sistēmu, kas apstrādā lietotājus, grupas un atļaujas.

Galvenās sastāvdaļas:

  • Lietotāji: Modelis django.contrib.auth.models.User glabā informāciju par lietotājiem (vārds, hashēta parole, e-pasts utt.).
  • Grupas: Modelis django.contrib.auth.models.Group apvieno lietotājus, lai vienkāršotu atļauju pārvaldību.
  • Atļaujas: Modelis django.contrib.auth.models.Permission nosaka, ko lietotājs drīkst darīt (skatīt, pievienot, rediģēt, dzēst modeļus).
  • Autentifikācijas aizmugures sistēmas: Klases, kas īsteno autentifikācijas (authenticate) un autorizācijas (get_user, has_perm, has_module_perms) metodes. Noklusējuma ir django.contrib.auth.backends.ModelBackend.

Autentifikācijas process:

  1. Lietotājs nosūta pieteikšanās datus (parasti caur formu).
  2. Django izsauc authenticate() metodi konfigurētajos aizmugures sistēmas, nododot datus.
  3. Aizmugures sistēma meklē lietotāju pēc datiem.
  4. Ja lietotājs ir atrasts, tā pārbauda paroli (salīdzinot hashus).
  5. Veiksmīgas pārbaudes gadījumā authenticate() atgriež lietotāja objektu.
  6. Django izsauc login() (skata vai starpniekā), kas iestata sesiju lietotājam.

Piemērs lietošanai skatā:

# views.py
from django.contrib.auth import authenticate, login
from django.shortcuts import render, redirect

def login_view(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        user = authenticate(request, username=username, password=password)

        if user is not None:
            login(request, user)
            return redirect('some_success_page')
        else:
            # Autentifikācijas kļūdas apstrāde
            pass
    return render(request, 'login.html')

Galvenās funkcijas un dekoratori autentifikācijai un atļauju pārbaudei:

  • @login_required: Dekorators skatieniem, kas prasa autentificētu lietotāju.
  • @permission_required('app_label.permission_code'): Dekorators skatieniem, kas prasa noteiktu atļauju.
  • user.is_authenticated: Pārbauda, vai lietotājs ir autentificēts.
  • user.has_perm('app_label.permission_code'): Pārbauda, vai lietotājam ir konkrēta atļauja.
  • user.has_module_perms('app_label'): Pārbauda, vai lietotājam ir atļaujas uz moduli.

Konfigurācija:

  • AUTHENTICATION_BACKENDS: Reģistrēto aizmugures sistēmu saraksts. Noklusējuma ir ['django.contrib.auth.backends.ModelBackend'].
  • LOGIN_URL: URL, uz kuru tiek novirzīti neautentificēti lietotāji, izmantojot @login_required.
  • LOGIN_REDIRECT_URL: URL, uz kuru tiek novirzīts pēc veiksmīgas pieteikšanās.