[PYTHON] Zurücksetzen des Passworts über die API mit dem Django Rest Framework

Dies ist eine Erinnerung, als ich eine API mithilfe des Rest-Frameworks in Django implementierte und versuchte, eine Funktion zum Zurücksetzen des Benutzerkennworts zu implementieren. Django hat eine leistungsstarke Authentifizierungsfunktion namens "django.contrib.auth", aber diesmal war es eine API-Implementierung, daher war es nicht einfach. Es gab eine Bibliothek für die API django-rest-auth, daher werde ich diese verwenden. Masu

Ablauf des Zurücksetzens des Passworts

Nutzer

API

Es wird der Fluss von. Es ist ein allgemeiner Fluss Wenn Sie "django.contrib.auth" so wie es ist verwenden, können Sie es fast fertigstellen, indem Sie einfach die Vorlage festlegen. Diesmal wird jedoch ein API-Endpunkt erstellt, sodass wir die Bibliothek verwenden

Was ist Django-Rest-Auth?

Laut Dokumentation scheint es sich um eine Bibliothek zu handeln, die Benutzerregistrierung, An- / Abmelden, Kennwortänderung und Zurücksetzen durchführt. Es war praktisch, aber die Dokumentation war äußerst unfreundlich, so dass ich sie beim Lesen des Quellcodes implementiert habe.

Vorerst

pip install django-rest-auth

Implementierung in django-rest-auth

API Wenn Sie es der Bibliothek überlassen, fügen Sie die folgenden zwei Zeilen zu "urls.py" hinzu, und es wird funktionieren

urls.py


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

Wenn dies unverändert bleibt, kann die E-Mail-Vorlage nicht festgelegt werden. Wenn Sie die Vorlage nicht festlegen, können Sie die Domäne der in der E-Mail beschriebenen URL nicht festlegen

Es scheint, dass Sie den Serializer von django-rest-auth überschreiben müssen, um ihn festzulegen Geben Sie "email_template_name" usw. in "get_email_options" an. Es scheint andere Elemente zu geben, die eingestellt werden können

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

Die E-Mail-Vorlage enthält Django-Standardvorlage. schauen Sie bitte Bitte wenden Sie sich mit {{protocol}}: // {{domain}} an die Front-URL

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 %}

Und passen Sie views.py entsprechend an Ich habe auf [hier] verwiesen (https://github.com/Tivix/django-rest-auth/blob/49ccfe92a9e691ac4224de7a878c87402181c09e/rest_auth/views.py#L132)

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)

Zum Schluss routen Sie diese Ansicht mit urls.py (1. Zeile)

urls.py


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

Jetzt haben Sie zwei APIs

--/ password / reset /: Zum Senden der E-Mail-Adresse --/ rest-auth / password / reset / verify /: Zum Senden des Passworts

Ich denke, es ist in Ordnung, es "django-rest-auth" zu überlassen, um Passwörter zu senden

Vorderseite

Es scheint, dass auf der Vorderseite zwei Dinge vorzubereiten sind (bitte bereiten Sie auch die Übergangsquelle und das Übergangsziel usw. vor). Die in der Ansicht und der API zu registrierenden Inhalte lauten wie folgt

Anzeigen, um die E-Mail-Adresse einzugeben

Erstellen Sie ein Formular zur Eingabe Ihrer E-Mail-Adresse

/password/reset/

Anzeigen, um das Passwort einzugeben

Erstellen Sie zwei Formulare, um das Passwort einschließlich der Bestätigung einzugeben

/rest-auth/password/reset/confirm/

UID und Token geben die Zeichenfolge an, die in der in der E-Mail enthaltenen URL enthalten ist.

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

Zusammenfassung

Ich denke, es ist eine ziemlich aggressive Methode Ich frage mich, ob es einen besseren Weg gibt

Recommended Posts

Zurücksetzen des Passworts über die API mit dem Django Rest Framework
So erstellen Sie eine Rest-API in Django
So generieren Sie automatisch ein API-Dokument mit dem Django REST-Framework und POST vom Dokumentbildschirm
So schreiben Sie eine benutzerdefinierte Validierung in Django REST Framework
Implementierung von CRUD mithilfe der REST-API mit Python + Django Rest Framework + igGrid
Erstellen Sie eine REST-API, um dynamodb mit dem Django REST Framework zu betreiben
Wie man mit verstümmelten Charakteren in json von Django REST Framework umgeht
So erstellen Sie eine Anwendung aus der Cloud mithilfe des Django-Webframeworks
So zeigen Sie eine Karte mit der Google Map API (Android) an
So erhalten Sie Artikeldaten mithilfe der Qiita-API
Django REST Framework Ein wenig nützlich zu wissen.
So können Sie die Funktionen des Django Rest Frameworks in einer Datei ausprobieren
Grundlagen des Django REST-Frameworks
Tipps zum Django Rest Framework
[Rails] So erhalten Sie Standortinformationen mithilfe der Geolocation-API
RHCSA-Prüfungsvorbereitung - So setzen Sie das Kennwort des Root-Kontos zurück
Wenn Sie mit dem Django REST-Framework filtern möchten
Implementieren Sie die API mit explosiver Geschwindigkeit mithilfe des Django REST Framework
[Django Rest Framework] Passen Sie die Filterfunktion mit Django-Filter an
Analysieren mit Google Colaboratory mithilfe der Kaggle-API
Kintones REST-API-Snippet (Wie schreibe ich einen API-Token-Authentifizierungsheader, wie schreibe ich einen Anmeldenamen, ein Passwort-Authentifizierungsheader, wie schreibe ich eine Abfrage?)
Erstellen einer API, die mit BERT im Django REST-Framework negativ-positive Inferenzergebnisse zurückgibt
Die erste API, die mit dem Python Djnago REST-Framework erstellt wurde
So lösen Sie den CSRF-Schutz bei Verwendung von AngularJS mit Django
So generieren Sie eine Abfrage mit dem IN-Operator in Django
Django REST Framework Stolperstein
Django REST Framework mit Vue.js
Melden Sie sich mit dem Django Rest Framework an
Implementierung der JWT-Authentifizierungsfunktion in Django REST Framework mit djoser
So erhalten Sie mithilfe der Mastodon-API Follower und Follower von Python
[Django] So testen Sie Form [TDD]
Wie man CSS in Django reflektiert
Wie fange ich mit Django an?
Verwendung der Python-API von OpenPose
Installieren Sie das Python Framework Django mit pip
Wie benutzt man Bing Search API?
Wie schreibe ich Django1.9 umweltunabhängig wsgi.py
[Django] Verwenden Sie MessagePack mit dem Django REST-Framework
[Python] Verwendung der Typetalk-API
Versuchen Sie es mit Pythons Webframework Django (1) - Von der Installation bis zum Serverstart
Entwicklung und Bereitstellung der REST-API in Python mit Falcon Web Framework
So erhalten Sie mithilfe der API von Virus Total einen Beispielbericht aus einem Hashwert
[Rails] Erkennen radikaler Bilder durch Analysieren von Bildern mithilfe der Cloud Vision API
Ich möchte eine API erstellen, die ein Modell mit einer rekursiven Beziehung im Django REST Framework zurückgibt
So führen Sie eine arithmetische Verarbeitung mit der Django-Vorlage durch
Erstellen Sie eine RESTful-API mit dem Django Rest Framework
Logisches Löschen in Django, DRF (Django REST Framework)
Verstehen Sie den Komfort des Django Rest Framework
Ein Verwaltungstool, das sofort mit dem REST-Framework ng-admin + Django erstellt werden kann
So überprüfen Sie die Version von Django
So zeichnen Sie ein Diagramm mit Matplotlib
Massenposting an Qiita: Team mit Qiita API
So richten Sie SVM mit Optuna ein
So löschen Sie abgelaufene Sitzungen in Django
CRUD GET mit Nuxt & Django REST Framework ②
Verschiedene Hinweise zum Django REST-Framework
CRUD POST mit Nuxt & Django REST Framework
So installieren Sie ein Paket mithilfe eines Repositorys
So stellen Sie xg boost mit Optuna ein