Я пытаюсь сбросить пароль, используя SetPasswordForm
в Django.Однако аутентифицированный пользователь не останется в системе после того, как я сохраню форму, если у меня там нет ненужной строки кода, которую я назвал, NONSENE
.
Это в методе form_valid
.
class PasswordResetView(FormView):
"""
Reset user password. Either with provided uid/token get parameters
or if the user is logged in.
"""
template_name = 'users/password_reset.html'
form_class = SetPasswordForm
success_url = '/'
def corrupt_link_redirect(self, request):
messages.error(
self.request,
user_strings.PASSWORD_RESET_INVALID_LINK
)
return redirect('forgot_password')
def get_form(self):
try:
user = User.objects.get(pk=self.request.session.get('pw_pk'))
except User.DoesNotExist:
return Http404() ## Refine this
return self.form_class(user, **self.get_form_kwargs())
def post(self, request, *args, **kwargs):
if not request.session.get('pw_pk') and request.user.is_authenticated:
request.session['pw_pk'] = request.user.pk
return super(PasswordResetView, self).post(request, *args, **kwargs)
def get(self, request, *args, **kwargs):
if request.user.is_authenticated:
## User is logged in so present them with the password reset form
request.session['pw_pk'] = request.user.pk
return super(PasswordResetView, self).get(request, *args, **kwargs)
try:
uidb64 = request.GET.get('uid')
token = request.GET.get('token')
if uidb64 is None or token is None:
return self.corrupt_link_redirect(request) ## Failure redirect
uid = force_text(urlsafe_base64_decode(uidb64))
user = User.objects.get(pk=uid)
except (TypeError, ValueError, OverflowError, User.DoesNotExist):
return self.corrupt_link_redirect(request) ## Failure redirect
if user is not None and PasswordResetTokenGenerator().check_token(user, token):
request.session['pw_pk'] = user.pk
return super(PasswordResetView, self).get(request, *args, **kwargs)
return self.corrupt_link_redirect(request) ## Failure redirect
def form_valid(self, form):
try:
NONSENSE = self.request.user.is_authenticated
form.save()
update_session_auth_hash(self.request, form.user)
## Delete session item
if self.request.session.get('pw_pk'):
del self.request.session['pw_pk']
except User.DoesNotExist:
pass
messages.success(
self.request,
user_strings.PASSWORD_RESET_SUCCESS if self.request.user.is_authenticated \
else user_strings.PASSWORD_RESET_SUCCESS + user_strings.PASSWORD_RESET_SUCCESS_LOGIN_REMINDER
)
return super(PasswordResetView, self).form_valid(form)