diff options
| author | Bobby <[email protected]> | 2022-08-01 19:20:26 +0530 |
|---|---|---|
| committer | Bobby <[email protected]> | 2022-08-01 19:20:26 +0530 |
| commit | 5f42ebdf74e2888d499c3e1c87e78c3fd0f89a8c (patch) | |
| tree | d1f3baa0ee35da1ef587c880ff69f46b4bdf0281 /users/views.py | |
| parent | e27296b279aa0df54881bfbb0d4b7d892fdb22b9 (diff) | |
| download | thatcomputerscientist-5f42ebdf74e2888d499c3e1c87e78c3fd0f89a8c.tar.xz thatcomputerscientist-5f42ebdf74e2888d499c3e1c87e78c3fd0f89a8c.zip | |
feature: change user email address
Diffstat (limited to 'users/views.py')
| -rw-r--r-- | users/views.py | 51 |
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('/') |
