post()得到了一个意想不到的关键字参数' uidb64'重置密码rest_auth

时间:2018-01-28 15:09:42

标签: django django-rest-framework django-allauth django-rest-auth allauth

现在我使用rest_auth重置密码什么电子邮件发送和url打开像这样但我添加了它的值: This is the page when i click on url sent in email

在填写字段并发帖后请求我得到: This is the error i get

这是我的网址:

urlpatterns = [
path('', include('rest_auth.urls')),
path('login/', LoginView.as_view(), name='account_login'),
path('registration/', include('rest_auth.registration.urls')),
path('registration/', RegisterView.as_view(), name='account_signup'),
re_path(r'^account-confirm-email/', VerifyEmailView.as_view(),
     name='account_email_verification_sent'),
re_path(r'^account-confirm-email/(?P<key>[-:\w]+)/$', VerifyEmailView.as_view(),
     name='account_confirm_email'),
re_path(r'^password/reset/(?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')
]

并且视图是在rest_auth中内置的:

class PasswordResetConfirmView(GenericAPIView):
"""
Password reset e-mail link is confirmed, therefore
this resets the user's password.

Accepts the following POST parameters: token, uid,
    new_password1, new_password2
Returns the success/fail message.
"""
serializer_class = PasswordResetConfirmSerializer
permission_classes = (AllowAny,)

@sensitive_post_parameters_m
def dispatch(self, *args, **kwargs):
    return super(PasswordResetConfirmView, self).dispatch(*args, **kwargs)

def post(self, request):
    serializer = self.get_serializer(data=request.data)
    serializer.is_valid(raise_exception=True)
    serializer.save()
    return Response(
        {"detail": _("Password has been reset with the new password.")}

1 个答案:

答案 0 :(得分:2)

你的URLconf导致使用两个kwargs调用post方法 - uidb64和token - 但你的post方法不接受任何kwargs。要消除错误,只需将kwargs添加到post方法签名:

def post(self, request, *args, **kwargs):
    # ...