реализация сброса пароля с помощью djoser - PullRequest
0 голосов
/ 23 января 2019

Я хотел использовать djoser для функции сброса пароля и в соответствии с документацией:

PASSWORD_RESET_CONFIRM_URL

URL-адрес вашей страницы сброса пароля внешнего интерфейса,Он должен содержать заполнители {uid} и {token}, например, #/password-reset/{uid}/{token}.Вы должны передать uid и токен для сброса конечной точки подтверждения пароля.

Я сделал следующее:

PASSWORD_RESET_CONFIRM_URL': 'reset/password/reset/confirm/{uid}/{token}',

url

url(r'^reset/password/reset/confirm/(?P<uid>[\w-]+)/(?P<token>[\w-]+)/$', PasswordResetView.as_view(),),

Просмотр:

class PasswordResetView(APIView):

   def get (self, request, uid, token):
       post_data = {'uid': uid, 'token': token}
       return Response(post_data)

В моей почте я получаю эту ссылку: http://127.0.0.1:8000/reset/password/reset/confirm/Mjk/538-954dccbc1b06171eff4d

Очевидно, что я получу:

{
"uid": "Mjk",
"token": "538-954dccbc1b06171eff4d"

}

как вывод, но я хотел перейти к auth/password/reset/confirm, когда пользователь щелкает ссылку в письме.

1 Ответ

0 голосов
/ 19 июля 2019

Сначала опишем действия:

  1. Пользователь нажимает на ссылку для сброса пароля. сброс пароля
  2. (Здесь вам нужна форма для получения имени пользователя или адреса электронной почты, в зависимости от ваших настроек). Пользователь вводит имя пользователя и нажимает кнопку Отправить.
  3. Пользователь получает электронное письмо со ссылкой для сброса пароля.
  4. По ссылке открывается браузер, в котором содержится форма «Создать новый пароль».
  5. Пользователь вводит новый пароль и отправляет форму
  6. Браузер перенаправляет страницу на домашнюю страницу и сообщает, что пароль был сброшен.

Затем вы можете использовать следующий метод для сброса пароля.

#template
<p>Use the form below to change your password. Your password cannot be the same as your username.</p>
<form role="form" method="post">
  {% csrf_token %}
  <input type="password" name="password1" placeholder="New Password">
  <input type="submit">
</form>

#view
from django.shortcuts import redirect, render
from djoser.conf import django_settings

def reset_user_password(request, uid, token):
    if request.POST:
        password = request.POST.get('password1')
        payload = {'uid': uid, 'token': token, 'new_password': password}

        url = '{0}://{1}{2}'.format(
            django_settings.PROTOCOL, django_settings.DOMAIN, reverse('password_reset_confirm'))

        response = requests.post(url, data=payload)
        if response.status_code == 204:
            # Give some feedback to the user. For instance:
            # https://docs.djangoproject.com/en/2.2/ref/contrib/messages/
            messages.success(request, 'Your password has been reset successfully!')
            return redirect('home')
        else:
            return Response(response.json())
    else:
        return render(request, 'templates/reset_password.html')
...