Login/Signup redirect to profile if logged in

This commit is contained in:
Oliver Falk
2018-11-12 13:25:50 +01:00
parent b9d062c19c
commit 40e976cce8
2 changed files with 32 additions and 6 deletions

View File

@@ -5,7 +5,7 @@ from django.urls import path
from django.conf.urls import url from django.conf.urls import url
from django.views.generic import TemplateView 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 django.contrib.auth.decorators import login_required
from . views import CreateView, PasswordSetView, AddEmailView from . views import CreateView, PasswordSetView, AddEmailView
@@ -18,14 +18,14 @@ from . views import AddOpenIDView, RedirectOpenIDView, ConfirmOpenIDView
from . views import CropPhotoView from . views import CropPhotoView
from . views import UserPreferenceView, UploadLibravatarExportView from . views import UserPreferenceView, UploadLibravatarExportView
from . views import ResendConfirmationMailView from . views import ResendConfirmationMailView
from . views import IvatarLoginView
# Define URL patterns, self documenting # Define URL patterns, self documenting
# To see the fancy, colorful evaluation of these use: # To see the fancy, colorful evaluation of these use:
# ./manager show_urls # ./manager show_urls
urlpatterns = [ # pylint: disable=invalid-name urlpatterns = [ # pylint: disable=invalid-name
path('new/', CreateView.as_view(), name='new_account'), path('new/', CreateView.as_view(), name='new_account'),
path('login/', LoginView.as_view(template_name='login.html'), path('login/', IvatarLoginView.as_view(), name='login'),
name='login'),
path( path(
'logout/', LogoutView.as_view(next_page='/'), 'logout/', LogoutView.as_view(next_page='/'),
name='logout'), name='logout'),

View File

@@ -19,6 +19,7 @@ from django.views.generic.base import View, TemplateView
from django.views.generic.detail import DetailView from django.views.generic.detail import DetailView
from django.contrib.auth import authenticate, login from django.contrib.auth import authenticate, login
from django.contrib.auth.forms import UserCreationForm, SetPasswordForm 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.utils.translation import ugettext_lazy as _
from django.http import HttpResponseRedirect, HttpResponse from django.http import HttpResponseRedirect, HttpResponse
from django.urls import reverse_lazy, reverse from django.urls import reverse_lazy, reverse
@@ -73,6 +74,15 @@ class CreateView(SuccessMessageMixin, FormView):
return HttpResponseRedirect( return HttpResponseRedirect(
reverse_lazy('login')) # pragma: no cover 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') @method_decorator(login_required, name='dispatch')
class PasswordSetView(SuccessMessageMixin, FormView): class PasswordSetView(SuccessMessageMixin, FormView):
@@ -637,7 +647,7 @@ class ConfirmOpenIDView(View): # pragma: no cover
if self.request.user.photo_set.count() == 1: if self.request.user.photo_set.count() == 1:
confirmed.set_photo(self.request.user.photo_set.first()) 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 if not UserOpenID.objects.filter(claimed_id=confirmed.openid).exists(): # pylint: disable=no-member
user_openid = UserOpenID() user_openid = UserOpenID()
user_openid.user = self.request.user user_openid.user = self.request.user
@@ -700,7 +710,7 @@ class CropPhotoView(TemplateView):
try: try:
openid = ConfirmedOpenId.objects.get( # pylint: disable=no-member openid = ConfirmedOpenId.objects.get( # pylint: disable=no-member
openid=request.POST['openid']) openid=request.POST['openid'])
except ConfirmedOpenId.DoesNotExist: except ConfirmedOpenId.DoesNotExist: # pylint: disable=no-member
pass # Ignore automatic assignment pass # Ignore automatic assignment
return photo.perform_crop(request, dimensions, email, openid) return photo.perform_crop(request, dimensions, email, openid)
@@ -809,7 +819,7 @@ class ResendConfirmationMailView(View):
try: try:
email = self.model.objects.get( # pylint: disable=no-member email = self.model.objects.get( # pylint: disable=no-member
user=request.user, id=kwargs['email_id']) 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')) messages.error(request, _('ID does not exist'))
else: else:
try: try:
@@ -824,3 +834,19 @@ class ResendConfirmationMailView(View):
(_('Unable to send confirmation email for'), (_('Unable to send confirmation email for'),
email.email, exc)) email.email, exc))
return HttpResponseRedirect(reverse_lazy('profile')) 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)