From 40e976cce8ba455532b7d064c83942b25e28cbf9 Mon Sep 17 00:00:00 2001 From: Oliver Falk Date: Mon, 12 Nov 2018 13:25:50 +0100 Subject: [PATCH] Login/Signup redirect to profile if logged in --- ivatar/ivataraccount/urls.py | 6 +++--- ivatar/ivataraccount/views.py | 32 +++++++++++++++++++++++++++++--- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/ivatar/ivataraccount/urls.py b/ivatar/ivataraccount/urls.py index 94f878b..1e2d419 100644 --- a/ivatar/ivataraccount/urls.py +++ b/ivatar/ivataraccount/urls.py @@ -5,7 +5,7 @@ from django.urls import path from django.conf.urls import url from django.views.generic import TemplateView -from django.contrib.auth.views import LoginView, LogoutView +from django.contrib.auth.views import LogoutView from django.contrib.auth.decorators import login_required from . views import CreateView, PasswordSetView, AddEmailView @@ -18,14 +18,14 @@ from . views import AddOpenIDView, RedirectOpenIDView, ConfirmOpenIDView from . views import CropPhotoView from . views import UserPreferenceView, UploadLibravatarExportView from . views import ResendConfirmationMailView +from . views import IvatarLoginView # Define URL patterns, self documenting # To see the fancy, colorful evaluation of these use: # ./manager show_urls urlpatterns = [ # pylint: disable=invalid-name path('new/', CreateView.as_view(), name='new_account'), - path('login/', LoginView.as_view(template_name='login.html'), - name='login'), + path('login/', IvatarLoginView.as_view(), name='login'), path( 'logout/', LogoutView.as_view(next_page='/'), name='logout'), diff --git a/ivatar/ivataraccount/views.py b/ivatar/ivataraccount/views.py index 414bc3e..ad4b79a 100644 --- a/ivatar/ivataraccount/views.py +++ b/ivatar/ivataraccount/views.py @@ -19,6 +19,7 @@ from django.views.generic.base import View, TemplateView from django.views.generic.detail import DetailView from django.contrib.auth import authenticate, login from django.contrib.auth.forms import UserCreationForm, SetPasswordForm +from django.contrib.auth.views import LoginView from django.utils.translation import ugettext_lazy as _ from django.http import HttpResponseRedirect, HttpResponse from django.urls import reverse_lazy, reverse @@ -73,6 +74,15 @@ class CreateView(SuccessMessageMixin, FormView): return HttpResponseRedirect( reverse_lazy('login')) # pragma: no cover + def get(self, request, *args, **kwargs): + ''' + Handle get for create view + ''' + if request.user: + if request.user.is_authenticated: + return HttpResponseRedirect(reverse_lazy('profile')) + return super().get(self, request, args, kwargs) + @method_decorator(login_required, name='dispatch') class PasswordSetView(SuccessMessageMixin, FormView): @@ -637,7 +647,7 @@ class ConfirmOpenIDView(View): # pragma: no cover if self.request.user.photo_set.count() == 1: confirmed.set_photo(self.request.user.photo_set.first()) - # Also allow user to login using this OPenID (if not already taken) + # Also allow user to login using this OpenID (if not already taken) if not UserOpenID.objects.filter(claimed_id=confirmed.openid).exists(): # pylint: disable=no-member user_openid = UserOpenID() user_openid.user = self.request.user @@ -700,7 +710,7 @@ class CropPhotoView(TemplateView): try: openid = ConfirmedOpenId.objects.get( # pylint: disable=no-member openid=request.POST['openid']) - except ConfirmedOpenId.DoesNotExist: + except ConfirmedOpenId.DoesNotExist: # pylint: disable=no-member pass # Ignore automatic assignment return photo.perform_crop(request, dimensions, email, openid) @@ -809,7 +819,7 @@ class ResendConfirmationMailView(View): try: email = self.model.objects.get( # pylint: disable=no-member user=request.user, id=kwargs['email_id']) - except self.model.DoesNotExist: # pragma: no cover # pylint: disable=no-member + except self.model.DoesNotExist: # pragma: no cover pylint: disable=no-member messages.error(request, _('ID does not exist')) else: try: @@ -824,3 +834,19 @@ class ResendConfirmationMailView(View): (_('Unable to send confirmation email for'), email.email, exc)) return HttpResponseRedirect(reverse_lazy('profile')) + +class IvatarLoginView(LoginView): + ''' + View class for login + ''' + + template_name = 'login.html' + + def get(self, request, *args, **kwargs): + ''' + Handle get for login view + ''' + if request.user: + if request.user.is_authenticated: + return HttpResponseRedirect(reverse_lazy('profile')) + return super().get(self, request, args, kwargs)