Форма Django для сброса пароля REST API

Моя ситуация:

Django app + мобильное приложение, использующее Django REST api и rest-auth. Я хочу реализовать транзакцию сброса пароля, запущенную в мобильном приложении.

Рабочий процесс, за которым я следую:

1) Выполнить запрос на сброс пароля с мобильного телефона -> ОК, без проблем

2) Django отправляет письмо пользователю -> ОК, нет проблем

3) Перейдите на страницу электронной почты и создайте новый пароль -> ОК, нет проблем. Но форма, представленная для создания нового пароля, является формой API REST framework.

Вопросы

1) Могу ли я настроить эту форму? Я понятия не имею, как это сделать, так как этот URL является переменной (с UID и токеном). Какие-либо предложения?

2) Подходит ли этот рабочий процесс или есть лучший способ управления рабочим процессом сброса пароля?

В моем файле URL у меня есть:

urlpatterns = [
    ...
    re_path(r'^password/reset/confirm/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
]

Должен ли я создать здесь пользовательский вид?

В документации Django REST говорится, что среда REST подходит для возврата как ответов в стиле API, так и обычных HTML-страниц. Но я не смог найти подходящий пример, который поможет мне в моем случае.

1 ответ

Найденное решение Для тех, у кого может быть такая же проблема:

По сути, я не осознавал, что существует один рабочий процесс для сброса пароля в allauth, а другой - через rest_auth с некоторыми отличиями в токенах ссылок, используемых в электронных письмах.

Рабочий процесс в allauth подходит для моих нужд (тот, что из rest_auth требует использования просматриваемых форм API), просто необходим для его инициирования из первоначального запроса из запроса rest_auth, который я решил с помощью этого кода в моем views.py:

from rest_framework import status
from rest_framework.decorators import api_view, authentication_classes, 
permission_classes
from rest_framework.response import Response
from allauth.account.forms import ResetPasswordForm

@api_view(['POST'])    
@authentication_classes([])
@permission_classes([])
def recover_password(request):
    if request.data.get('email'):
        form = ResetPasswordForm({'email': request.data.get('email')})
        if form.is_valid():
            form.save(request)
            return Response('Email with instructions was sent to provided account', 
            status=status.HTTP_200_OK)
    return Response('Missing email', status=status.HTTP_400_BAD_REQUEST)

Функция получает электронную почту и запускает рабочий процесс Аллаута

Другие вопросы по тегам