[PYTHON] Plus de nouvelles méthodes d'authentification des utilisateurs avec Django REST Framework

Normalement, l'utilisateur est authentifié avec la colonne définie par ʻUSERNAME_FIELD et password de la classe qui hérite de ʻAbstractBaseUser. Ajoutons une nouvelle colonne appelée login_id afin que nous puissions également authentifier les utilisateurs avec login_id et password.

1. Ajout de «AUTHENTICATION_BACKENDS»

Je souhaite personnaliser l'authentification utilisateur, alors ajoutez ʻAUTHENTICATION_BACKENDS Voir la référence pour ʻAUTHENTICATION_BACKENDS https://docs.djangoproject.com/en/dev/ref/settings/#authentication-backends

backends.py


from django.contrib.auth.backends import ModelBackend
from project.models.user import User


class LoginIdModelBackend(ModelBackend):
    """
    login_identifiant et mot de passe
    """
    def authenticate(self, request, username=None, password=None, **kwargs):
        try:
            login_id = kwargs.get('login_id')
            if not login_id:
                raise User.DoesNotExist
            user = User.objects.get(login_id=login_id)
        except User.DoesNotExist:
            # Run the default password hasher once to reduce the timing
            # difference between an existing and a nonexistent user (#20760).
            User().set_password(password)
        else:
            if user.check_password(password) and self.user_can_authenticate(user):
                return user

settings.py


AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.ModelBackend',
    'backends.LoginIdModelBackend',
]

On suppose que la table User a une colonne login_id ʻAUTHENTICATION_BACKENDS` peut être appelé dans l'ordre, comme la prochaine authentification si l'authentification définie échoue. Donc, effectuez d'abord l'authentification jusqu'à présent, et si cela échoue, l'authentification avec l'ID de connexion sera exécutée.

2. Ajout de l'API d'authentification utilisateur pour login_id et password

views/auth.py


from rest_framework_simplejwt.views import TokenViewBase
from project import serializers


class LoginIdAuthTokenViewSet(TokenViewBase):
    serializer_class = serializers.LoginIdAuthTokenSerializer

serializer/auth.py


from rest_framework_simplejwt.serializers import TokenObtainPairSerializer


class LoginIdAuthTokenSerializer(TokenObtainPairSerializer):
    username_field = 'login_id'

    def create(self, validated_data):
        pass

    def update(self, instance, validated_data):
        pass

Veuillez également ajouter à urls.py

Cette fois, j'ai utilisé une API différente, mais selon la logique, je pense qu'il est possible de se connecter avec une API, par exemple avec une adresse e-mail ou un identifiant de connexion.

Recommended Posts

Plus de nouvelles méthodes d'authentification des utilisateurs avec Django REST Framework
Créer une API autour de l'authentification des utilisateurs avec Django REST Framework
Implémentation de la fonction d'authentification dans Django REST Framework à l'aide de djoser
Implémentation de la fonction d'authentification du modèle utilisateur personnalisé dans Django REST Framework à l'aide de djoser
Framework Django REST avec Vue.js
Connectez-vous avec Django Rest Framework
[Django] Utiliser MessagePack avec le framework Django REST
Créer une API RESTful avec Django Rest Framework
CRUD GET avec Nuxt & Django REST Framework ②
CRUD POST avec Nuxt & Django REST Framework
CRUD GET avec Nuxt & Django REST Framework ①
CRUD PUT, DELETE avec Nuxt & Django REST Framework
Bases du framework Django REST
Astuces Django Rest Framework
Créer une application Todo avec Django REST Framework + Angular
Essayez de créer une application Todo avec le framework Django REST
Lorsque vous souhaitez filtrer avec le framework Django REST
Implémenter des URL hiérarchiques avec des routeurs imbriqués drf dans le framework Django REST
Bloc d'achoppement du framework Django REST
Implémentation de la fonction d'authentification JWT dans Django REST Framework à l'aide de djoser
Implémentation de CRUD à l'aide de l'API REST avec Python + Django Rest framework + igGrid
Créer une API REST pour faire fonctionner dynamodb avec le Framework Django REST
Comment gérer les caractères déformés dans json de Django REST Framework
Suppression logique dans Django, DRF (Django REST Framework)
Comprendre la commodité de Django Rest Framework
Un outil administratif qui peut être créé immédiatement avec le framework ng-admin + Django REST
Notes diverses sur le framework Django REST
Django REST Framework + Considération de conception d'architecture propre
Comment générer automatiquement un document API avec le framework Django REST et POST à partir de l'écran de document
Django: enregistrez l'agent utilisateur et gérez-le avec l'administrateur
Framework Django REST Un peu utile à savoir.
Implémenter la fonctionnalité de connexion JWT dans le framework Django REST
Parfois, vous souhaitez accéder aux informations de vue depuis Serializer avec DRF (Django REST Framework)