Django: Redirect logged in users from reset password page

Viewed 263

I want to restrict access to reset_password page if the user is logged in and redirect it to home page!

I try to use another a class like this but it s not working

#views.py
class MyPasswordResetView(UserPassesTestMixin, PasswordResetView):
template_name = 'security/reset_password.html'

   def test_func(self):
    if self.request.user.is_authenticated:
        return redirect("home-page")
    return self.request.user.is_anonymous

But its not working!

#urls.py
urlpatterns = [
path('register/', register_page, name = "register-page"),
path('home/', home, name = "home-page"),
path('logout/', logout_view, name = "logout"),
path('login/', login_page, name = "login"),

path('account/', account_view, name = "account"),


path('change_password/', auth_views.PasswordChangeView.as_view(template_name = "security/change_password.html"), name = "password_change"),
path('change_password/done/', auth_views.PasswordChangeDoneView.as_view(template_name = "security/change_password_succes.html"), name = "password_change_done"),



path('reset_password/', MyPasswordResetView.as_view(subject_template_name = "security/password_reset_subject.txt", email_template_name = "security/password_reset_email.html", template_name = "security/reset_password.html"), name = "password_reset"),

path('reset_password/done/', auth_views.PasswordResetDoneView.as_view(template_name = "security/password_reset_done.html"), name = "password_reset_done"),

path('reset_password_din_mail_venita/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(template_name = "security/ajunge_din_mail_aici.html"), name='password_reset_confirm'),


path('reset_password/complete/', auth_views.PasswordResetCompleteView.as_view(template_name = "security/password_reset_complete.html"), name = "password_reset_complete"),

]

1 Answers

You can override the .dispatch(…) method [Django-doc], this is for example also done in the LogoutView to logout users:

class MyPasswordResetView(PasswordResetView):
    template_name = 'security/reset_password.html'

   def dispatch(self, *args, **kwargs):
       if self.request.user.is_authenticated:
           return redirect('home-page')
       return super().dispatch(*args, **kwargs)
Related