diff --git a/aleksis/core/mixins.py b/aleksis/core/mixins.py
index 3cad91f2c80301d8d73268e32f58d7773c5a45c8..7b7b0b2b466e2c4f35311eb9253d6af144b5660d 100644
--- a/aleksis/core/mixins.py
+++ b/aleksis/core/mixins.py
@@ -5,6 +5,7 @@ from typing import Any, Callable, List, Optional, Tuple, Union
 
 from django.conf import settings
 from django.contrib import messages
+from django.contrib.auth.views import LoginView, SuccessURLAllowedHostsMixin
 from django.contrib.contenttypes.models import ContentType
 from django.contrib.sites.managers import CurrentSiteManager
 from django.contrib.sites.models import Site
@@ -415,6 +416,13 @@ class SuccessMessageMixin(ModelFormMixin):
         return super().form_valid(form)
 
 
+class SuccessNextMixin(SuccessURLAllowedHostsMixin):
+    redirect_field_name = "next"
+
+    def get_success_url(self) -> str:
+        return LoginView.get_redirect_url(self) or super().get_success_url()
+
+
 class AdvancedCreateView(SuccessMessageMixin, CreateView):
     pass