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

Posted

技术标签:

【中文标题】Django Rest Framework + Django-Allauth 密码重置/恢复【英文标题】:Django Rest Framework + Django-Allauth Password Reset/Recovery 【发布时间】:2015-01-08 06:18:04 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

我想通了

我将此添加到我的 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?) 将其添加到views.py @psychok7 你把这个放在我可以看看的仓库里了吗?【参考方案2】:

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

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',

【讨论】:

你在哪里创建了新类?你能扩展你的解决方案吗? 新类在模块“api.helpers.pwdreset”中——但只要您在第二部分中使用该路径,它就可以在任何文件中。第二位在您的 settings.py 中 我收到此错误:ValueError: not enough values to unpack (expected 2, got 1)。知道可能是什么原因吗?

以上是关于Django Rest Framework + Django-Allauth 密码重置/恢复的主要内容,如果未能解决你的问题,请参考以下文章

rest-framework框架的基本组件

Django中rest_framework的APIView,序列化组件和视图组件

如何正确地将参数传递给基于类的视图测试 Django Rest Framework?

Django-rest-framework 和 django-rest-framework-jwt APIViews and validation Authorization headers

Django Rest Framework 和 django Rest Framework simplejwt 两因素身份验证

怎么安装django rest framework