[PYTHON] Comment réinitialiser le mot de passe via l'API à l'aide du framework Rest Django

Ceci est un rappel lorsque j'ai implémenté l'API en utilisant le framework rest dans Django et que j'ai essayé d'implémenter la fonction de réinitialisation du mot de passe utilisateur. Django a une puissante fonction d'authentification appelée django.contrib.auth, mais cette fois c'était une implémentation d'API donc ce n'était pas facile. Il y avait une bibliothèque pour l'API django-rest-auth, donc je vais continuer à l'utiliser. Masu

Flux de réinitialisation du mot de passe

Utilisateur

API --Recevoir une demande avec adresse e-mail

Cela devient le flux de. C'est un flux commun Si vous utilisez django.contrib.auth tel quel, vous pouvez presque le compléter simplement en définissant le modèle, mais cette fois, ce sera la création du point de terminaison de l'API, nous utiliserons donc la bibliothèque

Qu'est-ce que django-rest-auth?

Selon Documentation, il semble que ce soit une bibliothèque qui effectue l'enregistrement des utilisateurs, la connexion / déconnexion, le changement de mot de passe et la réinitialisation. C'était pratique, mais la documentation était extrêmement hostile, alors je l'ai implémentée en lisant le code source.

Pour le moment

pip install django-rest-auth

Implémentation dans django-rest-auth

API Si vous le laissez à la bibliothèque, ajoutez les deux lignes suivantes à ʻurls.py` et cela fonctionnera

urls.py


url(r'^rest-auth/', include('rest_auth.urls')),
url(r'^', include('django.contrib.auth.urls')),

S'il est laissé tel quel, le modèle de courrier ne peut pas être défini. Si vous ne définissez pas le modèle, vous ne pouvez pas définir le domaine de l'URL décrite dans le courrier

Il semble que vous deviez remplacer le sérialiseur de django-rest-auth pour le définir Spécifiez ʻemail_template_name etc. dans get_email_options`. Il semble y avoir d'autres éléments qui peuvent être définis

serializers.py


from rest_auth.serializers import PasswordResetSerializer

class CustomPasswordResetSerializer(PasswordResetSerializer):
	def get_email_options(self):
		data = {
			'email_template_name': 'email/password_reset.html',
			'subject_template_name': 'email/password_reset_subject.txt',
		}
		return data

Le modèle d'e-mail a modèle par défaut de django, veuillez donc vous y référer. regarde s'il te plait Veuillez diriger vers l'URL principale avec «{{protocol}}: // {{domain}}»

django/django/contrib/admin/templates/registration/password_reset_email.html


{% load i18n %}{% autoescape off %}
{% blocktrans %}You're receiving this email because you requested a password reset for your user account at {{ site_name }}.{% endblocktrans %}

{% trans "Please go to the following page and choose a new password:" %}
{% block reset_link %}
{{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}
{% endblock %}
{% trans "Your username, in case you've forgotten:" %} {{ user.get_username }}

{% trans "Thanks for using our site!" %}

{% blocktrans %}The {{ site_name }} team{% endblocktrans %}

{% endautoescape %}

Et ajustez views.py en conséquence J'ai fait référence à ici

views.py


from rest_framework.generics import GenericAPIView
from user.serializers import CustomPasswordResetSerializer

class PasswordResetView(GenericAPIView):
	permission_classes = (permissions.AllowAny,)
	serializer_class = CustomPasswordResetSerializer

	def post(self, request):
		serializer = self.get_serializer(data=request.data)
		if serializer.is_valid():
			serializer.save()
			return Response('Password reset e-mail has been sent.', status=200)
		return Response(serializer.errors, status=400)

Enfin, acheminez cette vue avec ʻurls.py` (1ère ligne)

urls.py


url(r'^/password/reset/$', PasswordResetView.as_view()),
url(r'^rest-auth/', include('rest_auth.urls')),
url(r'^', include('django.contrib.auth.urls')),

Maintenant, vous avez deux API

--/ password / reset /: Pour envoyer une adresse e-mail --/ rest-auth / password / reset / confirm /: Pour envoyer le mot de passe

Je pense que c'est correct de laisser django-rest-auth pour l'envoi des mots de passe

de face

Il semble qu'il y ait deux choses à préparer sur la face avant (veuillez également préparer la source et la destination de la transition, etc.) Les contenus à enregistrer dans la vue et l'API sont les suivants

Afficher pour saisir l'adresse e-mail

Créez un formulaire pour saisir votre adresse e-mail

/password/reset/

Afficher pour saisir le mot de passe

Créez deux formulaires pour saisir le mot de passe, y compris la confirmation

/rest-auth/password/reset/confirm/

uid et token spécifient la chaîne de caractères incluse dans l'URL incluse dans l'e-mail.

https://***/reset/{ uid }/{ token }/

Résumé

Je pense que c'est une méthode assez agressive Je me demande s'il y a une meilleure façon

Recommended Posts

Comment réinitialiser le mot de passe via l'API à l'aide du framework Rest Django
Comment créer une API Rest dans Django
Comment générer automatiquement un document API avec le framework Django REST et POST à partir de l'écran de document
Comment écrire une validation personnalisée dans Django REST Framework
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
Comment créer une application à partir du cloud à l'aide du framework Web Django
Comment afficher la carte à l'aide de l'API Google Map (Android)
Comment obtenir des données d'article à l'aide de l'API Qiita
Framework Django REST Un peu utile à savoir.
Comment vous permettre d'essayer les fonctionnalités du framework django rest dans un seul fichier
Bases du framework Django REST
Astuces Django Rest Framework
[Rails] Comment obtenir des informations de localisation à l'aide de l'API de géolocalisation
Préparation à l'examen RHCSA - Comment réinitialiser le mot de passe du compte root
Lorsque vous souhaitez filtrer avec le framework Django REST
Implémentez l'API à une vitesse explosive en utilisant Django REST Framework
[Django Rest Framework] Personnalisez la fonction de filtre à l'aide de Django-Filter
Comment analyser avec Google Colaboratory à l'aide de l'API Kaggle
Extrait d'API REST de Kintone (Comment écrire l'en-tête d'authentification du jeton d'API, comment écrire l'en-tête d'authentification du mot de passe du nom de connexion, comment écrire une requête)
Création d'une API qui renvoie des résultats d'inférence négatifs-positifs à l'aide de BERT dans le framework Django REST
La première API à créer avec le framework Python Djnago REST
Comment résoudre la protection CSRF lors de l'utilisation d'AngularJS avec Django
Comment générer une requête à l'aide de l'opérateur IN dans Django
Bloc d'achoppement du framework Django REST
Framework Django REST avec Vue.js
Connectez-vous avec Django Rest Framework
Implémentation de la fonction d'authentification JWT dans Django REST Framework à l'aide de djoser
Comment obtenir des abonnés et des abonnés de Python à l'aide de l'API Mastodon
[Django] Comment tester le formulaire [TDD]
Comment refléter CSS dans Django
Comment démarrer avec Django
Comment utiliser l'API Python d'OpenPose
Installer le framework Python django à l'aide de pip
Comment utiliser l'API Bing Search
Comment écrire un fichier wsgi.py indépendant de l'environnement Django1.9
[Django] Utiliser MessagePack avec le framework Django REST
[Python] Comment utiliser l'API Typetalk
Essayez d'utiliser le framework web de Python Django (1) - De l'installation au démarrage du serveur
Développement et déploiement de l'API REST en Python à l'aide de Falcon Web Framework
Comment obtenir un exemple de rapport à partir d'une valeur de hachage à l'aide de l'API de Virus Total
[Rails] Comment détecter des images radicales en analysant des images à l'aide de l'API Cloud Vision
Je souhaite créer une API qui retourne un modèle avec une relation récursive dans Django REST Framework
Comment effectuer un traitement arithmétique avec le modèle Django
Créer une API RESTful avec 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
Comment vérifier la version de Django
Comment dessiner un graphique avec Matplotlib
Publication groupée sur Qiita: équipe utilisant l'API Qiita
Comment configurer SVM à l'aide d'Optuna
Comment supprimer des sessions expirées dans Django
CRUD GET avec Nuxt & Django REST Framework ②
Notes diverses sur le framework Django REST
CRUD POST avec Nuxt & Django REST Framework
Comment installer un package à l'aide d'un référentiel
Comment configurer XG Boost à l'aide d'Optuna