Django Email authentication

claireliao
1 min readOct 3, 2021

0. If you are not ready with sending Emails with Django, please visit this post: https://lcliao617.medium.com/django-send-email-4292fd10b86c

  1. First, we need to have a token class that can deal with “Create token”, “Verify token”
from itsdangerous import URLSafeTimedSerializer
import base64
class registerToken:
def __init__(self,security_key):
self.security_key = security_key
sk_encode = security_key.encode("utf-8")
self.salt = base64.encodestring(sk_encode)
def generate_validate_token(self,username):
serializer = URLSafeTimedSerializer(self.security_key)
return serializer.dumps(username,self.salt)
def confirm_validate_token(self,token,expireation=3600):
serializer = URLSafeTimedSerializer(self.security_key)
return serializer.loads(token,salt=self.salt,max_age=expireation)

And default expiry time is 1 hour(3600 seconds)

2. Import class in views.py

from TestApp import utilstoken_confirm = utils.registerToken(SECRET_KEY)
# SECRET_KEY is the one in settings.py
# claim this line global(not in any function)
# Create your views here.
def activate_user(request,token=None):
try:
username = token_confirm.confirm_validate_token(token)
#Write your active logic here
print(user,"activate!!!!")
return redirect('/login')
except:
#Time expiry or token error go here
return redirect('/activate_fail')def send_email_with_token(request):
#Your register logic
token = token_confirm.generate_validate_token(username)
message = "\n".join([
u'{0},welcome'.format(username),
u'Please click the link to active your account with an hour',
'/'.join([DOMAIN,'account/activate',token]
)])
send_mail('Register Web ',message , settings.EMAIL_HOST_USER
[email], fail_silently=False)

Then you can get the email with encrypting token!

--

--