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 .models import Club, LiveMatch, TeamScore, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamRegistration, PlayerRegistration
from django.contrib.auth import password_validation from django.contrib.auth import password_validation
from django.utils.translation import gettext_lazy as _ 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): class UserSerializer(serializers.ModelSerializer):
password = serializers.CharField(write_only=True) password = serializers.CharField(write_only=True)
def create(self, validated_data): def create(self, validated_data):
# Customize user creation logic here
print(validated_data) print(validated_data)
umpire_code = None umpire_code = None
@ -37,6 +43,7 @@ class UserSerializer(serializers.ModelSerializer):
country=country, country=country,
) )
self.send_email(self.context['request'], user)
# RegistrationProfile.objects.filter(user=user).send_activation_email() # RegistrationProfile.objects.filter(user=user).send_activation_email()
return user return user
@ -48,6 +55,19 @@ class UserSerializer(serializers.ModelSerializer):
# ) # )
# return user # 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: class Meta:
club_id = serializers.PrimaryKeyRelatedField(queryset=Club.objects.all()) club_id = serializers.PrimaryKeyRelatedField(queryset=Club.objects.all())
model = CustomUser 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('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.shortcuts import render, get_object_or_404
from django.http import HttpResponse 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 tournaments.models import group_stage
from .serializers import ClubSerializer, TournamentSerializer, UserSerializer, ChangePasswordSerializer, EventSerializer, RoundSerializer, GroupStageSerializer, MatchSerializer, TeamScoreSerializer, TeamRegistrationSerializer, PlayerRegistrationSerializer, LiveMatchSerializer 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): def players(request):
return render(request, 'tournaments/test.html') 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 #####
@api_view(['GET']) @api_view(['GET'])

Loading…
Cancel
Save