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

6
我正在尝试使用Django Rest Framework和Django-Allauth创建密码恢复流程。Django-Allauth已经完成了我所需的一切,我的问题是,我是否可以从DRF编写代码调用Django-Allauth的函数或视图,以接收要重置的电子邮件,并继续进行正常的allauth流程(例如创建临时令牌并向客户发送电子邮件)?
如果其中一个应用程序正在执行我所需的所有操作,我不明白为什么还要重写所有这些代码。只需要一些帮助来“粘合”它们 :)
2个回答

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)

你把这段代码添加到 DRF 的哪个文件中了?(例如,在 rest_framework 中的 settings.py 文件中?) - guitarical
将其添加到views.py文件中。 - psychok7
@psychok7,你把这个放在仓库里了吗?我能看一下吗? - addohm

5
如果有帮助的话,我通过创建一个新类来覆盖密码序列化程序来解决了这个问题。
from rest_auth.serializers import PasswordResetSerializer
from allauth.account.forms import ResetPasswordForm

class PasswordSerializer (PasswordResetSerializer):
    password_reset_form_class = ResetPasswordForm

那么,请确保将以下内容添加到您的设置中:

然后,请确保将以下内容添加到您的设置中:

REST_AUTH_SERIALIZERS = {
    'PASSWORD_RESET_SERIALIZER': 'api.helpers.pwdreset.PasswordSerializer',
}

你在哪里创建了新的类?能否详细说明一下你的解决方案? - addohm
1
新的类在模块“api.helpers.pwdreset”中,但只要您在第二部分中使用该路径,它可以在任何文件中。第二部分在您的settings.py文件中。 - adamtay82
1
我遇到了这个错误:ValueError: not enough values to unpack (expected 2, got 1)。你有什么想法是什么原因导致的吗? - Little Brain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接