Git Product home page Git Product logo

django-email-verification's Introduction

Django email validator

Requirements

  • Python >= 3.8
  • Django 3.0.7

General concept

alt text

Installation

You can install by:

pip3 install django-email-verification

and import by:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    ...
    'django_email_verification', # you have to add this
]

Settings parameters

You have to add these parameters to the settings, you have to include all of them except the last one:

EMAIL_ACTIVE_FIELD = 'is_active'
EMAIL_SERVER = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_ADDRESS = '[email protected]'
EMAIL_FROM_ADDRESS = '[email protected]'
EMAIL_PASSWORD = 'mYC00lP4ssw0rd' # os.environ['password_key'] suggested
EMAIL_MAIL_SUBJECT = 'Confirm your email'
EMAIL_MAIL_HTML = 'mail_body.html'
EMAIL_MAIL_PLAIN = 'mail_body.txt'
EMAIL_PAGE_TEMPLATE = 'confirm_template.html'
EMAIL_PAGE_DOMAIN = 'http://mydomain.com/'

In detail:

  • EMAIL_ACTIVE_FIELD: the user model field which will be set to True once the email is confirmed
  • EMAIL_SERVER: your mail provider's server (e.g. 'smtp.gmail.com' for gmail)
  • EMAIL_PORT: your mail provider's server port (e.g. 587 for gmail)
  • EMAIL_ADDRESS: your email address
  • EMAIL_FROM_ADDRESS: this can be the same as email_address or an alias address if required.
  • EMAIL_PASSWORD: your email address' password
  • EMAIL_MAIL_:
    • SUBJECT: the mail default subject (needed)
    • HTML: the mail body in form of html (not needed)
    • PLAIN: the mail body in form of .txt file (needed if HTML is not defined)
  • EMAIL_PAGE_TEMPLATE: the template of the success/error view
  • EMAIL_PAGE_DOMAIN: the domain of the confirmation link (usually your site's domain)

Templates examples

The EMAIL_MAIL_HTML should look like this ({{ link }} is passed during the rendering):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <style>
        h1{ color: blue; }
    </style>
</head>
    <body>
        <h1>You are almost there!</h1><br>
        <h2>Please click <a href="{{ link }}">here</a> to confirm your account</h2>
    </body>
</html>

The EMAIL_MAIL_PLAIN should look like this ({{ link }} is passed during the rendering):

You are almost there!
Please click the following link to confirm your account
{{ link }}

The EMAIL_PAGE_TEMPLATE should look like this ({{ success }} is boolean and passed during the rendering):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Confirmation</title>
    <style>
        body{ color: blue; }
    </style>
</head>
<body>
    {% if success %}
        You have confirmed your account!
    {% else %}
        Error, invalid token!
    {% endif %}
</body>
</html>

Email sending

After you have created the user you can send the confirm email

from django.shortcuts import render
from django.contrib.auth import get_user_model
from django_email_verification import sendConfirm

def myCreateView(request):
    ...
    user = get_user_model().objects.create(username=username, password=password, email=email)
    sendConfirm(user)
    return render(...)

sendConfirm(user) sets user's EMAIL_ACTIVE_FIELD to False and sends an email with the defined template (and the pseudo-random generated token) to the user.

Token verification

You have to include the urls in urls.py

from django.contrib import admin
from django.urls import path, include
from django_email_verification import urls as mail_urls

urlpatterns = [
    path('admin/', admin.site.urls),
    ...
    path('email/', include(mail_urls)),
]

When a request arrives to https.//mydomain.com/email/<base64 email>/<token> the package verifies the token and:

  • if it corresponds to a pending token it renders the EMAIL_PAGE_TEMPLATE passing success=True and deletes the token
  • if it doesn't correspond it renders the EMAIL_PAGE_TEMPLATE passing success=False

django-email-verification's People

Contributors

dowling-john avatar leonebacciu avatar subodhk01 avatar thethomaslane avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.