Seite 1 von 1

Django: Probleme mit Implementierung von Aktivierungslink

Verfasst: Samstag 28. Mai 2022, 10:40
von AFX
Ich bin gerade dabei, eine Anmeldung mit Emailbestätigung zu schreiben.

Nun verstehe ich nicht, was der Link tun soll… Meine Funktion, die den Aktivierungslink raushaut, sieht so aus:

Code: Alles auswählen

def sendmailconfirm(self):
    file = open(MEDIA_ROOT + os.path.sep + 'sent_emails/myfile.txt', 'r')
    content = file.read()
    file.close()

    # EmailMessage class version
    mail = EmailMessage('subject', content, '<meinemailaddy>@web.de', [self.cleaned_data['email']])
    mail.send()
Nun habe ich unter accounts/reset/MQ folgende html-Datei (password_reset_confirm):

Code: Alles auswählen

<!-- templates/registration/password_reset_confirm.html -->
{% extends "base.html" %}

{% block title %}Enter new password{% endblock %}

{% block content %}

{% if validlink %}

<h1>Set a new password!</h1>
<form method="POST">
  {% csrf_token %}
  {{ form.as_p }}
  <input type="submit" value="Change my password">
</form>

{% else %}

<p>The password reset link was invalid, possibly because it has already been used.  Please request a new password reset.</p>

{% endif %}
{% endblock %}
Aber immer, wenn ich den Bestätigungslink klicke, kommt so ne Seite namens Django-Verwaltung, wo steht:

Passwort nicht erfolgreich zurückgesetzt
Der Link zum Zurücksetzen Ihres Passworts ist ungültig, wahrscheinlich weil er schon einmal benutzt wurde. Bitte setzen Sie Ihr Passwort erneut zurück.

Ich denke mal, da habe ich was übersehen, daher meine Frage: Wie soll ich da weitermachen? Besten Dank im Voraus für Tipps :-)

Re: Django: Probleme mit Implementierung von Aktivierungslink

Verfasst: Samstag 28. Mai 2022, 10:46
von sparrow
Zum Code: Dateien öffnet man mit dem with Statement, damit man nicht per Hand schließen muss.

Ansonsten hat der gezeigte Code nichts mit dem Problem zu tun. Welches Modul verwendest du? Wie konfiguriert? Wie sieht der View aus? Was hat der Passwort Reset mit der E-Mail-Bestätigung zu tun?

Re: Django: Probleme mit Implementierung von Aktivierungslink

Verfasst: Samstag 28. Mai 2022, 10:49
von __deets__
Es hat nix mit deinem eigentlichen Problem zu tun, aber die Art, wie du da die Datei oeffnest und schliesst ist wirklich abenteuerlich.

Man benutzt nicht open/close, sondern das with-Statement. Und man stueckelt sich keine Pfade mit + und os.path.sep zusammen. Sondern man benutzt die pathlib. Wenn man die benutzt, kann man sich in diesem Fall sogar das with sparen, weil die schon gleich eine read_text Methode kennt:

Code: Alles auswählen

import pathlib

MEDIA_ROOT = pathlib.Path(...)

...

def sendmailconfirm(self):
     content = (MEDIA_ROOT / "sent_emails" / "myfile.txt").read_text(encoding="utf-8")
...
Was dein Problem angeht: ich benutze Django nicht, aber habe solche Funktionen natuerlich schon gebaut. Das klingt so, als ob der Link nicht die korrekten Argumente hat. Der muss ja sowas wie einen hash dran kleben haben, damit man das zuordnen kann. Wie sieht der also aus, und wie soll der laut Doku aussehen?

Re: Django: Probleme mit Implementierung von Aktivierungslink

Verfasst: Samstag 28. Mai 2022, 17:58
von AFX
sparrow hat geschrieben: Samstag 28. Mai 2022, 10:46 Wie sieht der also aus, und wie soll der laut Doku aussehen?
Ich hab mir das ganze Ding aus dieser Doku gerippt: https://learndjango.com/tutorials/djang ... t-tutorial

Da steht:
But the important section for now is the URL included. In the email above, mine is http://127.0.0.1:8000/accounts/reset/MQ ... baaf3c77f/. Copy and paste yours into your browser and you'll be automatically routed to the Password reset confirmation page.
We aber bekomme ich nun meine URL raus (das steht da nicht, kA ich kenne auch keine Doku, wo das steht - oder ist das Djangomagie)?

Re: Django: Probleme mit Implementierung von Aktivierungslink

Verfasst: Samstag 28. Mai 2022, 18:10
von sparrow
Kannst du das und dich bitte einmal sortieren und die gestellten Fragen beantworten?

Was willst du tun? Aktivierungslink oder Password reset?
Das sind zwei völlig unterschiedliche Dinge - und das eine nennst du in der Überschrift, das andere ist das, worauf sich deine Codehäppchen und das Tutorial bezieht.

Re: Django: Probleme mit Implementierung von Aktivierungslink

Verfasst: Sonntag 29. Mai 2022, 13:12
von AFX
Ich versuche in der Tat einen Aktivierungslink zu versenden. Ich versuche das mit django.contrib.auth zu schaffen. In der view gibt es da eine Funktion, die einen POST-request sendet, wenn die Anmelde-Form valide ausgefüllt wurde:

Code: Alles auswählen

def signup(request):
    if request.method == 'POST':
        form = CustomUserCreationForm(request.POST)
        if form.is_valid():
            form.sendmailconfirm()
            form.save()
Doch was mir Rätsel aufgibt ist, was genau da für ein Link zu generieren ist,dass der angemeldete und somit in die DB eingetragene Benutzer eben aktiviert wird.

Re: Django: Probleme mit Implementierung von Aktivierungslink

Verfasst: Sonntag 29. Mai 2022, 16:33
von sparrow
Das ist nicht ganz trivial selbst zu implementieren.
Nach kurzem Googeln: Hier wird das ganz gut erklärt. Zumindest springt mir da beim schnellen Drüberschauen nichts Schlimmes ins Ausge.

Re: Django: Probleme mit Implementierung von Aktivierungslink

Verfasst: Montag 30. Mai 2022, 20:12
von AFX
Super danke!!

Re: Django: Probleme mit Implementierung von Aktivierungslink

Verfasst: Freitag 3. Juni 2022, 22:23
von gomez72
HI, ich habe in den letzten beiden Tagen die gleiche Funktion bei bei meiner Seite implementiert.
Kontnte ein Modul finden, dass sich als APP dann einbinden lässt und keine Wünsche in der Sache offen lässt.
Die Implemenatation ist gut beschrieben und hat bei mir funktioniert

https://pypi.org/project/Django-Verify-Email/
vg gomez