Send email to validate accounts

clubs
Laurent 2 years ago
parent e9f88b40a5
commit af8a26ce71
  1. 22
      tournaments/serializers.py
  2. 5
      tournaments/templates/tournaments/acc_active_email.html
  3. 10
      tournaments/tokens.py
  4. 1
      tournaments/urls.py
  5. 16
      tournaments/views.py

@ -2,13 +2,19 @@ from rest_framework import serializers
from .models import Club, LiveMatch, TeamScore, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamRegistration, PlayerRegistration
from django.contrib.auth import password_validation
from django.utils.translation import gettext_lazy as _
# email
from .tokens import account_activation_token
from django.template.loader import render_to_string
from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode
from django.utils.encoding import force_bytes
from django.core.mail import EmailMessage
from django.contrib.sites.shortcuts import get_current_site
class UserSerializer(serializers.ModelSerializer):
password = serializers.CharField(write_only=True)
def create(self, validated_data):
# Customize user creation logic here
print(validated_data)
umpire_code = None
@ -37,6 +43,7 @@ class UserSerializer(serializers.ModelSerializer):
country=country,
)
self.send_email(self.context['request'], user)
# RegistrationProfile.objects.filter(user=user).send_activation_email()
return user
@ -48,6 +55,19 @@ class UserSerializer(serializers.ModelSerializer):
# )
# return user
def send_email(self, request, user):
current_site = get_current_site(request)
mail_subject = 'Activation link has been sent to your email id'
message = render_to_string('tournaments/acc_active_email.html', {
'user': user,
'domain': current_site.domain,
'uid':urlsafe_base64_encode(force_bytes(user.pk)),
'token':account_activation_token.make_token(user),
})
email = EmailMessage(mail_subject, message, to=[user.email])
email.send()
class Meta:
club_id = serializers.PrimaryKeyRelatedField(queryset=Club.objects.all())
model = CustomUser

@ -0,0 +1,5 @@
{% autoescape off %}
Hi {{ user.username }},
Please click on the link to confirm your registration,
http://{{ domain }}{% url 'activate' uidb64=uid token=token %}
{% endautoescape %}

@ -0,0 +1,10 @@
from django.contrib.auth.tokens import PasswordResetTokenGenerator
# from django.utils import six
class TokenGenerator(PasswordResetTokenGenerator):
def _make_hash_value(self, user, timestamp):
return (
str(user.pk) + str(timestamp) + str(user.is_active)
)
account_activation_token = TokenGenerator()

@ -23,4 +23,5 @@ urlpatterns = [
])
),
path('players/', views.players, name='players'),
path('activate/<uidb64>/<token>/', views.activate, name='activate'),
]

@ -1,5 +1,8 @@
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse
from django.utils.encoding import force_str
from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode
from .tokens import account_activation_token
from tournaments.models import group_stage
from .serializers import ClubSerializer, TournamentSerializer, UserSerializer, ChangePasswordSerializer, EventSerializer, RoundSerializer, GroupStageSerializer, MatchSerializer, TeamScoreSerializer, TeamRegistrationSerializer, PlayerRegistrationSerializer, LiveMatchSerializer
@ -164,6 +167,19 @@ def tournament_live_group_stage_json(request, tournament_id):
def players(request):
return render(request, 'tournaments/test.html')
def activate(request, uidb64, token):
try:
uid = force_str(urlsafe_base64_decode(uidb64))
user = CustomUser.objects.get(pk=uid)
except(TypeError, ValueError, OverflowError, CustomUser.DoesNotExist):
user = None
if user is not None and account_activation_token.check_token(user, token):
user.is_active = True
user.save()
return HttpResponse('Thank you for your email confirmation. Now you can login your account.')
else:
return HttpResponse('Activation link is invalid!')
##### API #####
@api_view(['GET'])

Loading…
Cancel
Save