Django Rest Framework + Django-Allauth 密码重置/恢复

psy*_*ok7 6 python django password-recovery django-rest-framework django-allauth

我正在尝试使用 Django Rest Framework 和 Django-Allauth 创建密码恢复流程。

Django-Allauth 已经完成了我需要的一切,我的问题是我可以以编程方式调用 django-allauth 函数或从 DRF 接收我想要重置的电子邮件的视图,并继续正常的 allauth 流程的其余部分(例如创建临时令牌和发送电子邮件给客户?

如果其中一个应用程序正在做我需要的一切,我不认为必须重写所有代码。只需要一些关于如何“粘合”它们的帮助:)

psy*_*ok7 6

我想到了

我将此添加到我的 DRF 资源中

@list_route(
    methods=['post'], permission_classes=[AllowAny],
    authentication_classes=[NoAuthentication]
)
def recover_password(self, request):
    if request.DATA.get('email'):
        # Lets be smart and reuse django-allauth password recovery system
        form = ResetPasswordForm({'email': request.DATA.get('email')})
        if form.is_valid():
            form.save()
            return Response(status=200)
    return Response(status=400)
Run Code Online (Sandbox Code Playgroud)


小智 5

如果有帮助,只需创建一个新类来覆盖密码序列化程序即可解决此问题。

from rest_auth.serializers import PasswordResetSerializer
from allauth.account.forms import ResetPasswordForm

class PasswordSerializer (PasswordResetSerializer):
    password_reset_form_class = ResetPasswordForm
Run Code Online (Sandbox Code Playgroud)

然后确保将其添加到您的设置中:

REST_AUTH_SERIALIZERS = {
    'PASSWORD_RESET_SERIALIZER': 'api.helpers.pwdreset.PasswordSerializer',
}
Run Code Online (Sandbox Code Playgroud)