OSError at /en/reset_password/ [Errno 101] Network is unreachable
Так вот, я делаю проект django на Google Cloud, я добавил функцию забывания пароля из встроенной функции Django и уже попробовал ее локально. Но когда я попробовал ее на облаке, она выдала мне эту ошибку....
OSError at /en/reset_password/
[Errno 101] Network is unreachable
Request Method: POST
Request URL: http://04.198.88.75:8000/en/reset_password/
Django Version: 5.0.3
Exception Type: OSError
Exception Value:
[Errno 101] Network is unreachable
Exception Location: /usr/lib/python3.10/socket.py, line 833, in create_connection
Raised during: django.contrib.auth.views.PasswordResetView
Python Executable: /home/rsa-key-20240516/env/SlangID/bin/python
Python Version: 3.10.12
Python Path:
['/var/www/html/SlangID/src',
'/usr/lib/python310.zip',
'/usr/lib/python3.10',
'/usr/lib/python3.10/lib-dynload',
'/home/rsa-key-20240516/env/SlangID/lib/python3.10/site-packages']
Server time: Sun, 02 Jun 2024 11:55:50 +0000
Я действительно не понимаю, что делать Я уже пытался добавить правило брандмауэра, чтобы разрешить smtp-соединения, как это image....
Даже после этого он по-прежнему выдавал ту же ошибку, chatGPT (я был в отчаянии) посоветовал попробовать пропинговать IP 8.8.8.8. Когда я попробовал пинговать, он работает хорошо....
:~$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=122 time=1.91 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=122 time=0.552 ms
Затем я попробовал пинговать telnet smtp, вот так...
~$ telnet smtp.gmail.com 587
Trying 74.125.130.108...
Connected to smtp.gmail.com.
Escape character is '^]'.
220 smtp.gmail.com ESMTP d9443c01a7336-1f632356aa0sm47645545ad.74 - gsmtp
, что я посчитал успешным. Затем нужно проверить настройки электронной почты через командную оболочку Django, как показано ниже...
~$ python /var/www/html/SlangID/src/manage.py shell
Python 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from django.conf import settings
>>>
>>> print(settings.EMAIL_HOST)
smtp.gmail.com
>>> print(settings.EMAIL_PORT)
25
затем проверить правила брандмауэра, чтобы убедиться, что SMTP-порт 587 открыт для исходящего трафика, но я не совсем понял это. Вот мой urls.py для страницы "Забыли пароль"...
from django.contrib.auth import views as auth_views
# Forgot Password Paths
path('reset_password/', auth_views.PasswordResetView.as_view(
template_name='forgot_pass/change_password.html',
success_url=reverse_lazy('password_reset_done'),
),
name="password_reset"
), #1
path('reset_password/done/', auth_views.PasswordResetDoneView.as_view(template_name='forgot_pass/sent_email.html'), name="password_reset_done"), #2
path('reset/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(
template_name='forgot_pass/reset_pass.html',
success_url=reverse_lazy('password_reset_complete'),
),
name="password_reset_confirm"
), #3
path('reset_password_complete/', auth_views.PasswordResetCompleteView.as_view(
template_name='forgot_pass/complete_pass.html',
),
name="password_reset_complete"
), #4
Это единственный код, который я использовал, чтобы заставить его работать, а также эта часть в settings.py....
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_POST = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER ='sussy@gmail.com'
EMAIL_HOST_PASSWORD ='aaaa aaaa aaaa aaaa'
Я уже описал все в деталях.
По-видимому, мне пришлось просто изменить POST на PORT, когда я размещаю проект django на сервере Google Cloud, так что вот как выглядит мой файл settings.py....
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER ='sussy@gmail.com'
EMAIL_HOST_PASSWORD ='aaaa aaaa aaaa aaaa'