aboutsummaryrefslogtreecommitdiff
path: root/users/views.py
diff options
context:
space:
mode:
authorBobby <[email protected]>2022-08-01 19:20:26 +0530
committerBobby <[email protected]>2022-08-01 19:20:26 +0530
commit5f42ebdf74e2888d499c3e1c87e78c3fd0f89a8c (patch)
treed1f3baa0ee35da1ef587c880ff69f46b4bdf0281 /users/views.py
parente27296b279aa0df54881bfbb0d4b7d892fdb22b9 (diff)
downloadthatcomputerscientist-5f42ebdf74e2888d499c3e1c87e78c3fd0f89a8c.tar.xz
thatcomputerscientist-5f42ebdf74e2888d499c3e1c87e78c3fd0f89a8c.zip
feature: change user email address
Diffstat (limited to 'users/views.py')
-rw-r--r--users/views.py51
1 files changed, 49 insertions, 2 deletions
diff --git a/users/views.py b/users/views.py
index f4405a38..ce3b2c6f 100644
--- a/users/views.py
+++ b/users/views.py
@@ -11,7 +11,7 @@ from django.utils.html import strip_tags
from django.utils.encoding import force_bytes
from django.utils.http import urlsafe_base64_encode
from django.contrib.sites.shortcuts import get_current_site
-from .tokens import account_activation_token
+from .tokens import account_activation_token, EmailChangeTokenGenerator
from django.utils.http import urlsafe_base64_decode
# Create your views here.
@@ -136,4 +136,51 @@ def verify_email(request, uidb64, token):
return redirect('/')
else:
messages.error(request, 'The verification link is invalid!')
- return redirect('/') \ No newline at end of file
+ return redirect('/')
+
+def send_change_user_email(request):
+ user = request.user
+ new_email = request.POST['email']
+ if user is not None:
+ # check if email is already in use
+ if User.objects.filter(email=new_email).exists():
+ messages.error(request, 'Email is already in use!')
+ # Redirect to referrer
+ return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
+ # Check if the new and the old email are the same
+ if user.email == new_email:
+ messages.error(request, 'New email is the same as the old one!')
+ return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
+ # Send verification email
+ subject = 'Verify your email address'
+ message = render_to_string('email_change_verification_email.html', {
+ 'user': user.username if user.first_name is None else user.first_name,
+ 'site_name': 'That Computer Scientist',
+ 'uid': urlsafe_base64_encode(force_bytes(user.pk)),
+ 'token': EmailChangeTokenGenerator().encrypt(new_email),
+ 'protocol': 'https://' if request.is_secure() else 'http://',
+ 'domain': get_current_site(request).domain,
+ })
+ message = strip_tags(message)
+ send_mail(subject, message, 'That Computer Scientist <' + settings.EMAIL_HOST_USER + '>', [new_email])
+ messages.success(request, 'Verification email was sent! Please check your email.')
+ return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
+ else:
+ messages.error(request, 'Unable to change email! Please try again later.')
+ return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
+
+def change_email(request, uidb64, token):
+ try:
+ uid = urlsafe_base64_decode(uidb64).decode()
+ user = User.objects.get(pk=uid)
+ new_email = EmailChangeTokenGenerator().decrypt(token)
+ except (TypeError, ValueError, OverflowError, User.DoesNotExist):
+ user = None
+ if user is not None:
+ user.email = new_email
+ user.save()
+ messages.success(request, 'Email was successfully changed!')
+ return redirect('/account')
+ else:
+ messages.error(request, 'The verification link is invalid!')
+ return redirect('/')