Рубрики
Без рубрики

Учебник сброса пароля Django

В этом руководстве мы добавим последовательность сброса пароля в наше приложение Django. Это строит на наших … помеченных с Джанго, Питоном, Учебником, начинающим.

Аутентификация пользователя Django (3 серии деталей)

В этом руководстве мы добавим последовательность сброса пароля в наше приложение Django. Это основывается на нашей предыдущей работе, где мы добавили страницы входа в систему и выходы, а затем страницу регистрации.

Полный исходный код можно найти на Github Если вы застряли по пути.

Приложение Django Auth

Что мы хотим, это Password_Reset Страница, в которой пользователь может ввести свой адрес электронной почты и отправлять криптографически безопасное письмо с одноразовой ссылкой на Сброс страница. К счастью Django нас покрыл.

Если вы вспомните полный набор просмотров и URL, предоставленные Django auth Приложение, уже несколько для Сброс пароля.

accounts/login/ [name='login']
accounts/logout/ [name='logout']
accounts/password_change/ [name='password_change']
accounts/password_change/done/ [name='password_change_done']
accounts/password_reset/ [name='password_reset']
accounts/password_reset/done/ [name='password_reset_done']
accounts/reset/// [name='password_reset_confirm']
accounts/reset/done/ [name='password_reset_complete']

Однако шаблоны по умолчанию довольно безобразны, и нам нужно настроить их. Например, вот сброс пароля по умолчанию и пароль Сброс страниц:

Но сначала нам нужно настроить способ доставки или, по крайней мере, поддельные доставки, наши сообщения электронной почты.

SMTP-сервер

В реальном мире вы будете интегрироваться с электронной почтой, такой как MailGun или Sendgrid. Для целей развития Джанго Позволяет нам хранить электронные письма либо в консоли, либо в качестве файла. Мы выберем последнее и храните все отправленные электронные письма в папке называется Отправлено электронные письма В вашем каталоге проекта.

Чтобы настроить это, обновите наш settings.py Файл, добавив следующие две строки внизу под нашим перенаправленным URL.

# config/settings.py
EMAIL_BACKEND = "django.core.mail.backends.filebased.EmailBackend"
EMAIL_FILE_PATH = os.path.join(BASE_DIR, "sent_emails")

Теперь давайте изменим появление страниц сброса пароля.

Форма сброса пароля

Шаблон по умолчанию для сброса пароля находится в Шаблоны/Регистрация/Password_reset_form.html . Мы можем настроить это, создавая наши собственные password_reset_form.html файл:

(accounts) $ touch templates/registration/password_reset_form.html

Затем добавьте следующий код:


{% extends 'base.html' %}

{% block title %}Forgot Your Password?{% endblock %}

{% block content %}
  

Forgot your password?

Enter your email address below, and we'll email instructions for setting a new one.

{% csrf_token %} {{ form.as_p }}
{% endblock %}

Если вы обновите страницу на http://127.0.0.1:8000/accounts/password_reset/ Вы можете увидеть наше новое обновление:

Теперь идите вперед и введите адрес электронной почты, который соответствует фактическому созданному пользователю. Затем нажмите на кнопку, чтобы отправить ее.

После успешного представления мы перенаправлены на Сброс пароля Готово Страница, которая также уродливая. Давайте изменим это. Шаблон по умолчанию находится в Шаблоны/Регистрация/Password_reset_done.html Отказ Так как раньше создайте новый шаблон Файл в этом месте, а затем добавьте следующий код:

(accounts) $ touch templates/registration/password_reset_done.html

{% extends 'base.html' %}

{% block title %}Email Sent{% endblock %}

{% block content %}
  

Check your inbox.

We've emailed you instructions for setting your password. You should receive the email shortly!

{% endblock %}

Если вы обновляете страницу сброса пароля на http://127.0.0.1:8000/accounts/password_reset/done/ Мы можем увидеть нашу новую страницу.

Сброс пароля подтвердить

Помните, как мы настроили наш проект Django для хранения электронных писем в локальной папке, называемой sent_emails. ? Если вы посмотрите на Ваш проект теперь эта папка существует! Формат для TXT Файл будет выглядеть что-то вроде этого:

Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: Password reset on 127.0.0.1:8000
From: webmaster@localhost
To: will@wsvincent.com
Date: Mon, 12 Feb 2020 16:48:08 -0000
Message-ID: <154022688842.8329.13335839467917011243@1.0.0.127.in-addr.arpa>


You're receiving this email because you requested a password reset for your user account at 127.0.0.1:8000.

Please go to the following page and choose a new password:

http://127.0.0.1:8000/accounts/reset/MQ/50n-794b1459497cbe0ed399/

Your username, in case you've forgotten: wsv

Thanks for using our site!

The 127.0.0.1:8000 team

Это содержит язык Django по умолчанию, который мы можем настроить. Но важный раздел в настоящее время является URL-адрес. В письме выше мой – http://127.0.0.1:8000/accounts/reset/mq/50n-794b1459497cbe0ed399/ Отказ Скопируйте и вставьте это в свой браузер, и вы будете автоматически направлены на Сброс пароля подтверждение страница.

Уродливый, нет? Давайте создадим новый шаблон с нашими знаковыми шагами. Шаблон расположен по умолчанию в Шаблоны/Регистрация/Password_reset_confirm.html Так что давайте создадим это.

(accounts) $ touch templates/registration/password_reset_confirm.html

И введите новый код:


{% extends 'base.html' %}

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

{% block content %}

{% if validlink %}

Set a new password!

{% csrf_token %} {{ form.as_p }}
{% else %}

{% trans "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." %}

{% endif %} {% endblock %}

Обновить страницу на http://127.0.0.1:8000/accounts/reset/mg/set-password/ И вы увидите наш новый шаблон.

Сброс пароля сделан

Продолжай и создайте новый пароль в нашей форме. После подачи вы будете перенаправлены на нашу окончательную страницу по умолчанию, которая для Сброс пароля полный :

Чтобы настроить эту страницу, мы создадим новый password_reset_complete.html Шаблон и введите наш новый код:

(accounts) $ touch templates/registration/password_reset_complete.html

{% extends 'base.html' %}

{% block title %}Password reset complete{% endblock %}

{% block content %}

Password reset complete

Your new password has been set. You can log in now on the log in page.

{% endblock %}

Теперь сбросьте страницу в http://127.0.0.1:8000/accounts/reset/done/ и посмотреть наши Работа.

Добавить на главную страницу

Давайте добавим ссылку сброса пароля на главную страницу, чтобы пользователи зарегистрировали его. Мы можем использовать встроенный тег {% URL 'Password_reset'%}. Вот код.


{% extends 'base.html' %}

{% block title %}Home{% endblock %}

{% block content %}
{% if user.is_authenticated %}
  Hi {{ user.username }}!
  

logout

reset password

{% else %}

You are not logged in

login {% endif %} {% endblock %}

Заключение

Теперь мы реализовали надежный поток аутентификации пользователя для нашего веб-приложения с логин, выбором, регистрацией и сбросом пароля. Поздравляю!

Что еще мы хотим? Использование пользовательской пользовательской модели вместо встроенного Пользователь Модель хорошая идея. Django Docs ПРИМЕЧАНИЕ ОДИН: Настоятельно рекомендуется Отказ Вы также можете добавить функцию «Изменить пароль», проводят электронные письма для отправки или даже установки 3-го вечеринки Django-Allauth Пакет для включения входа в систему только по электронной почте и другие вкусности.

Аутентификация пользователя Django (3 серии деталей)

Оригинал: “https://dev.to/learndjango/django-password-reset-tutorial-3o7k”