Wie funktioniert das mit dem password_reset?

Django, Flask, Bottle, WSGI, CGI…
Antworten
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

Also das mit uberspace habe ich noch nicht hinbekommen - da knn ich ja eine neue Baustelle aufmachen:
Das mit dem password_reset ist ja eingebaut. Ist aber eine BlackBox für mich (noch eine).
Ich kann auf meiner Anmeldeseite auf einen Passwort vergessen Button Klicken und dann kommt auch brav die (Djangoeigene) password_reset Seite. Wenn ich diese anklicke und eine Emailadresse eingebe, erhalte ich auch eine Bestätigung - habe aber nicht wirklich erwartet, dass ich jetzt eine entsprechende Email bekomme.
Ich habe auch die Dokumentation gelesen, habe dort aber nicht gefunden, ob ich jetzt noch einen Emailserver - oder so - benötige. Ich finde nur einen Hinweis
Be aware that sending an email costs extra time, hence you may be vulnerable to an email address enumeration timing attack due to a difference between the duration of a reset request for an existing email address and the duration of a reset request for a nonexistent email address. To reduce the overhead, you can use a 3rd party package that allows to send emails asynchronously, e.g. django-mailer.
... mit dem ich erstmal nicht wirklich was anfangen kann.
Bei der Gelegenheit:
1. Frage: hinter dieser Registriereungs-Black-Box, stehen ja auch sicher Templates und Views - kann man die irgenwo sichtbar machen?
2. Frage. Ich habe in meinem Teil des Codes kein Bootstrap verwendet (ich habe es probehalber mal installiert und nach Unterschieden gesucht - außer der roboto Schrift von Google habe ich nicht viel Unterschied gesehen) aber - sehe ich das richtig, dass diese "eingebauten" Templates sehr wohl Bootstrap verwenden?
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

Aber hier bin ich nicht weiter.
Ich habe die Dokumentationhttps://docs.djangoproject.com/en/3.2/t ... l-backends gelesen. (Wahrscheinlich habe ich nicht alles verstanden). Bisher hat Django mir ja brav eine Email in einen Ordner geschickt (in sent_emails), da sind sie auch.
Jetzt habe ich:
EMAIL_BACKEND = "django.core.mail.backends.filebased.EmailBackend"
in
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
ersetzt und, soweit ich das verstanden habe, müsste es das schon gewesen sein - ich habe das nicht in meinem lokalen Code ersetzt, sondern im hochgeladenen. Da bekomme ich aber den Fehler "Server Error (500)".
Der Versuch, eine app ("email") zu installieren, um dort meinen smtp Server einzutragen , brachte die Meldung, dass diese App schon existiere - aber wieder mal die Frage: wo?
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Das smtp-Backend möchte die Mails über einen SMTP-Server versenden. Und dessen Zugangsdaten gibst du in der settings.py an.
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

Das heißt, das kommt so etwa einfach in die settings.py:

Code: Alles auswählen

DEFAULT_FROM_EMAIL = 'support <support@Rechentrainer.app>'  
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'  # SMTP-Backend
EMAIL_HOST = 'smpt.mein_host.de'
EMAIL_PORT = 465 # oder 587 oder so
EMAIL_USE_TLS = True  # Verbindung benutzt TLS-Verschlüsselung
EMAIL_HOST_USER = 'mein_benutzername'
EMAIL_HOST_PASSWORD = 'mein_benutzerpasswort
... und fertig?
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Ob da genau die Einstellungen sind, weiß ich nicht, aber: Ja.
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

Danke!
Diese habe ich jetzt ausprobiert - bekomme aber immer noch "Bad Gateway (500)".
Aber irgendwann bekomme ich das auch noch hin.
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

500 ist internal Server Error.
Also das, was bei dir lokal den Stacktrace im im Browser ausgibt. Das macht man live nicht.
Normalerweise schickt Django dann eine Mail an die eingestellt Admin-Adresse. Dafür muss man aber natürlich Mails schicken können.

Wenn du einen 500 bekommst musst du einen Blick in die logs werfen, um zu sehen, welcher Fehler aufgetreten ist.
Oder du musst für den Versuch debug=True in den settings setzen. Aber das sollte man auf einem produkiven System eigentlich nicht tun und sollte es hinterher auch wieder zurück drehen.
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

Also die letzten Zeilen sind:
File "/home/rechentrainer/.virtualenvs/rechentrainer.pythonanywhere.com/lib/python3.8/site-packages/django/core/mail/backends/smtp.py", line 80, in open
self.connection = self.connection_class(
File "/usr/lib/python3.8/smtplib.py", line 253, in __init__
(code, msg) = self.connect(host, port)
File "/usr/lib/python3.8/smtplib.py", line 339, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "/usr/lib/python3.8/smtplib.py", line 308, in _get_socket
return socket.create_connection((host, port), timeout,
File "/usr/lib/python3.8/socket.py", line 787, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
File "/usr/lib/python3.8/socket.py", line 918, in getaddrinfo
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Name or service not known

... für mich wieder chinesisch ... wahrscheinlich könnt ihr sowas lesen?
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Da soll eine Netzwerkverbindung aufgebaut werden - aber er Hostname scheint nicht bekannt zu sein.

Edit: Also falls du die Einstellungen aus deinem Post weiter oben benutzt hast: es heißt sicher smtp. nicht stmp. .
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

Also das ist ja schon wieder peinlich - das war es aber immer noch nicht. Wenn du meinst, die Einstellungen sind an der richtigen Stelle, dann probiere ich halt mal andere Emailadressen. Diese Werte habe ich aus meinem Thunderbird genommen, da funktionieren sie. Wo ich nicht sicher bin ist "EMAIL_USE_TLS = True" meine Einstellung ist "SSL/TLS" und "passwort normal" (was auch immer das bewirkt).
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Das ist die Verschlüsselung der Verbuindung. EMAIL_USE_TLS = True klingt richtig.
Aber der Fehler, den du oben gezeigst hast, deutet auf den falschen Hostnamen hin. War der falsch? Wenn ja und du ihn korrigiert hast: Wie ist der neue Fehler?
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

Ich habe "smtp.artfiles.de" durch "smtp.dcpserver.de" ersetzt, das sollte beides funktionieren. Hat es aber nicht.
Der error code:
File "/home/rechentrainer/.virtualenvs/rechentrainer.pythonanywhere.com/lib/python3.8/site-packages/django/core/mail/backends/smtp.py", line 80, in open
self.connection = self.connection_class(
File "/usr/lib/python3.8/smtplib.py", line 253, in __init__
(code, msg) = self.connect(host, port)
File "/usr/lib/python3.8/smtplib.py", line 339, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "/usr/lib/python3.8/smtplib.py", line 308, in _get_socket
return socket.create_connection((host, port), timeout,
File "/usr/lib/python3.8/socket.py", line 808, in create_connection
raise err
File "/usr/lib/python3.8/socket.py", line 796, in create_connection
sock.connect(sa)
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Der Fehler ist aber nun ein anderer.
Leider wenig aussagekräftig.
Vielleicht musst du jetzt ein bisschen mit TLS / SSL probieren und ggf. noch einmal in der Dokumentation schauen.
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Vielleicht ist der auch deswegen nicht aussagekräftig, weil er nicht vollständig ist. Da fehlt ja offenbar sowohl oben als auch unten was in dem Traceback.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

Bitteschön:
2023-02-08 18:54:31,701: Internal Server Error: /password_reset/
Traceback (most recent call last):
File "/home/rechentrainer/.virtualenvs/rechentrainer.pythonanywhere.com/lib/python3.8/site-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
File "/home/rechentrainer/.virtualenvs/rechentrainer.pythonanywhere.com/lib/python3.8/site-packages/django/core/handlers/base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/rechentrainer/.virtualenvs/rechentrainer.pythonanywhere.com/lib/python3.8/site-packages/django/views/generic/base.py", line 103, in view
return self.dispatch(request, *args, **kwargs)
File "/home/rechentrainer/.virtualenvs/rechentrainer.pythonanywhere.com/lib/python3.8/site-packages/django/utils/decorators.py", line 46, in _wrapper
return bound_method(*args, **kwargs)
File "/home/rechentrainer/.virtualenvs/rechentrainer.pythonanywhere.com/lib/python3.8/site-packages/django/utils/decorators.py", line 133, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "/home/rechentrainer/.virtualenvs/rechentrainer.pythonanywhere.com/lib/python3.8/site-packages/django/contrib/auth/views.py", line 242, in dispatch
return super().dispatch(*args, **kwargs)
File "/home/rechentrainer/.virtualenvs/rechentrainer.pythonanywhere.com/lib/python3.8/site-packages/django/views/generic/base.py", line 142, in dispatch
return handler(request, *args, **kwargs)
File "/home/rechentrainer/.virtualenvs/rechentrainer.pythonanywhere.com/lib/python3.8/site-packages/django/views/generic/edit.py", line 153, in post
return self.form_valid(form)
File "/home/rechentrainer/.virtualenvs/rechentrainer.pythonanywhere.com/lib/python3.8/site-packages/django/contrib/auth/views.py", line 255, in form_valid
form.save(**opts)
File "/home/rechentrainer/.virtualenvs/rechentrainer.pythonanywhere.com/lib/python3.8/site-packages/django/contrib/auth/forms.py", line 343, in save
self.send_mail(
File "/home/rechentrainer/.virtualenvs/rechentrainer.pythonanywhere.com/lib/python3.8/site-packages/django/contrib/auth/forms.py", line 284, in send_mail
email_message.send()
File "/home/rechentrainer/.virtualenvs/rechentrainer.pythonanywhere.com/lib/python3.8/site-packages/django/core/mail/message.py", line 298, in send
return self.get_connection(fail_silently).send_messages([self])
File "/home/rechentrainer/.virtualenvs/rechentrainer.pythonanywhere.com/lib/python3.8/site-packages/django/core/mail/backends/smtp.py", line 124, in send_messages
new_conn_created = self.open()
File "/home/rechentrainer/.virtualenvs/rechentrainer.pythonanywhere.com/lib/python3.8/site-packages/django/core/mail/backends/smtp.py", line 80, in open
self.connection = self.connection_class(
File "/usr/lib/python3.8/smtplib.py", line 253, in __init__
(code, msg) = self.connect(host, port)
File "/usr/lib/python3.8/smtplib.py", line 339, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "/usr/lib/python3.8/smtplib.py", line 308, in _get_socket
return socket.create_connection((host, port), timeout,
File "/usr/lib/python3.8/socket.py", line 808, in create_connection
raise err
File "/usr/lib/python3.8/socket.py", line 796, in create_connection
sock.connect(sa)
OSError: [Errno 101] Network is unreachable
2023-02-08 19:23:14,729: Not Found: /favicon.ico
2023-02-08 19:36:57,402: Not Found: /favicon.ico
2023-02-08 19:51:29,433: OSError: write error
2023-02-08 19:55:20,996: OSError: write error
2023-02-08 19:55:21,196: OSError: write error
2023-02-08 20:12:39,636: Not Found: /favicon.ico
2023-02-08 20:14:28,840: Not Found: /favicon.ico
2023-02-08 20:36:16,033: Not Found: /favicon.ico
2023-02-08 20:37:34,910: Not Found: /favicon.ico
2023-02-08 21:23:41,111: Not Found: /apple-touch-icon-120x120-precomposed.png
2023-02-08 21:23:41,230: Not Found: /apple-touch-icon-120x120.png
2023-02-08 21:23:41,344: Not Found: /apple-touch-icon-precomposed.png
2023-02-08 21:23:41,461: Not Found: /apple-touch-icon.png
2023-02-08 21:23:41,580: Not Found: /favicon.ico
2023-02-08 21:23:41,726: Not Found: /apple-touch-icon-120x120-precomposed.png
2023-02-08 21:23:41,849: Not Found: /apple-touch-icon-120x120.png
2023-02-08 21:23:42,050: Not Found: /apple-touch-icon-precomposed.png
2023-02-08 21:23:42,173: Not Found: /apple-touch-icon.png
2023-02-08 21:23:42,296: Not Found: /favicon.ico
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Vielleicht mag Pythonanywhere auch einfach nicht, dass man es als Spamschleuder verwendet: https://help.pythonanywhere.com/pages/SMTPForFreeUsers/
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

Wiedermal: Vielen Dank!
Wie findet ihr nur immer diese Seiten? Ich habe wirklich versucht, selbst zu recherchieren. Aber da einiges für mich immer noch eine BlackBox ist, suche ich vielleicht an der falschen Stelle.
Wenn ich das richtig sehe, betrifft das aber a) pythonanywhere (da bin ich wohl nicht mehr so lange) und b) kostenlose Zugänge bei pythonanywhere.
Antworten