diff --git a/pytition/petition/urls.py b/pytition/petition/urls.py index 2182997a..42480dfc 100644 --- a/pytition/petition/urls.py +++ b/pytition/petition/urls.py @@ -3,7 +3,7 @@ from . import views from .forms import PytitionUserCreationForm -from .views import PetitionCreationWizard, PytitionUserCreateView +from .views import PetitionCreationWizard, PytitionUserCreateView, PytitionLoginView from django.views.generic import RedirectView from django.urls import reverse_lazy from django.conf import settings @@ -61,7 +61,8 @@ path('wizard/org//new_petition/from_template/', PetitionCreationWizard.as_view(views.WizardForms), name='org_petition_wizard_from_template'), path('wizard/user/new_petition', PetitionCreationWizard.as_view(views.WizardForms), name='user_petition_wizard'), path('wizard/user/new_petition/from_template/', PetitionCreationWizard.as_view(views.WizardForms), name='user_petition_wizard_from_template'), - # Authentication + # Authentication - Custom login view that redirects authenticated users + path('login/', PytitionLoginView.as_view(), name='login'), path('', include('django.contrib.auth.urls')), path('account_settings', views.account_settings, name="account_settings"), # Misc diff --git a/pytition/petition/views.py b/pytition/petition/views.py index d5fafefa..6dc17be2 100644 --- a/pytition/petition/views.py +++ b/pytition/petition/views.py @@ -19,6 +19,7 @@ from django.contrib.auth.hashers import make_password from django.contrib.auth.models import User from django.contrib.auth.forms import PasswordChangeForm +from django.contrib.auth.views import LoginView from django.urls import reverse from django.utils.decorators import method_decorator from django.utils.timezone import now @@ -1785,8 +1786,16 @@ def search_users_and_orgs(request): return JsonResponse(result) +# User registration view that redirects authenticated users class PytitionUserCreateView(CreateView): + def dispatch(self, request, *args, **kwargs): + # If user is already authenticated, redirect them to the index page + if request.user.is_authenticated: + messages.info(request, _("You are already logged in.")) + return redirect('index') + return super().dispatch(request, *args, **kwargs) + def save_numbers(self, request): request.session['random_a'] = self.a request.session['random_b'] = self.b @@ -1818,6 +1827,18 @@ def form_valid(self, form): form.send_success_email() return super().form_valid(form) + +# Login view that redirects authenticated users +class PytitionLoginView(LoginView): + redirect_authenticated_user = True + + def get_redirect_url(self): + # If user is already authenticated, redirect to index + if self.request.user.is_authenticated: + return reverse('index') + return super().get_redirect_url() + + # //report/ # Report a petition to moderation def report_petition(request, petition_id, reason_id=None):