Skip to main content

django-graphql-accounts

django-graphql-accounts is a Django/Python application that provides a GraphQL interface for user signup and authentication. Email addresses are used for authentication, rather than usernames. Because the authentication user model is based on Django's AbstractBaseUser and is itself abstract, the model can be extended without the need for additional database tables. JWT authentication allows the API to be accessed from a variety of front ends, including Django, React and AngularJS clients, and iOS and Android mobile apps.

Features

  • API endpoints for signup, signup email verification, login, logout, password reset, password reset verification, password change, email change, and user detail.
  • Extensible abstract user model.
  • Perform password confirmation and other client-side validation on the front end for a better user experience.
  • JWT authentication.
  • Useing celery for send registrations email (optional).
  • Useing redis for save registrations token (optional).

Installation

django-graphql-accounts is available on the Python Package Index (PyPI) at https://pypi.org/project/django-graphql-accounts/.

Install django-graphql-accounts using one of the following techniques.

  • Use pip. Note that particular versions of Django and the Django graphone may be installed.
pip install django-graphql-accounts
  • Download the .tar.gz file from PyPI and install it yourself.
  • Download the source from Github and install it yourself.

If you install it yourself, also install Django, the Django Graphone, and Django Graphql JWT, and Redis Python

Usage

Create a Django project, if you haven't already. For example,

django-admin startproject mysite

In the settings.py file of your project, include django_graphql_accounts and `` in INSTALLED_APPS. Set the authentication scheme for the Django Graphql JWT.

mysite/settings.py
----

INSTALLED_APPS = [
	...
	'django_graphql_accounts',
	...
]

GRAPHENE = {
	"SCHEMA": "config.schema.schema",
	'MIDDLEWARE': [
		'graphql_jwt.middleware.JSONWebTokenMiddleware',
	],
}

AUTHENTICATION_BACKENDS = [
	'graphql_jwt.backends.JSONWebTokenBackend',
	'django.contrib.auth.backends.ModelBackend',
]

In the schemas.py file of your project, Add queries and mutations to the class of your schemas. For example,

mysite/schemas.py
----

import graphene
from graphql_jwt import mutations
from django_graphql_accounts.mutations import AccountsMutation
from django_graphql_accounts.queries import AccountsQuery


class Query(AccountsQuery, ... , graphene.ObjectType):
    pass


class Mutation(AccountsMutation, ... , graphene.ObjectType):
    pass


schema = graphene.Schema(query=Query, mutation=Mutation)

Create a Django application for your user data. For example,

python manage.py startapp accounts

In the models.py file of your application, extend EmailAbstractUser, add custom fields, and assign objects to EmailUserManager(). For example,

accounts/models.py
----

from django.db import models
from django_graphql_accounts.models import EmailUserManager, EmailAbstractUser

class MyUser(EmailAbstractUser):
	# Custom fields
	date_of_birth = models.DateField('Date of birth', null=True, blank=True)

	# ........, etc

	# Required
	objects = EmailUserManager()

In the settings.py file of your project, Set AUTH_USER_MODEL to the class of your user model. For example,

mysite/settings.py
----

INSTALLED_APPS = [
	...
	'django_graphql_accounts',
	'accounts',
	...
]

AUTH_USER_MODEL = 'accounts.MyUser'

In the admin.py file of your project, extend EmailUserAdmin to add your custom fields. For example,

accounts/admin.py
----

from django.contrib import admin
from django.contrib.auth import get_user_model


User = get_user_model()


@admin.register(User)
class UserAdmin(admin.ModelAdmin):
    pass

Create the database tables with Django's makemigrations, migrate, and create a superuser with createsuperuser.

python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser

Check your setup by starting a Web server on your local machine:

python manage.py runserver

When users signup or reset their password, they will be sent an email with a link and verification code. Include email settings as environment variables or in your project's settings.py file. For example,

mysite/settings.py
----

# Email settings
# https://docs.djangoproject.com/en/3.1/topics/email/
# https://docs.djangoproject.com/en/3.1/ref/settings/#email-host

import os

EMAIL_BACKEND = config('EMAIL_BACKEND')
MAILER_EMAIL_BACKEND = config('MAILER_EMAIL_BACKEND')
EMAIL_HOST = config('EMAIL_HOST')
EMAIL_HOST_PASSWORD = config('EMAIL_HOST_PASSWORD')
EMAIL_HOST_USER = config('EMAIL_HOST_USER')
EMAIL_PORT = config('EMAIL_PORT')
EMAIL_USE_SSL = config('EMAIL_USE_SSL')
DEFAULT_FROM_EMAIL = config('DEFAULT_FROM_EMAIL')

EMAIL_FROM = os.environ.get('AUTHEMAIL_DEFAULT_EMAIL_FROM') or '<YOUR DEFAULT_EMAIL_FROM HERE>'
EMAIL_BCC = os.environ.get('AUTHEMAIL_DEFAULT_EMAIL_BCC') or '<YOUR DEFAULT_EMAIL_BCC HERE>'

EMAIL_HOST = os.environ.get('AUTHEMAIL_EMAIL_HOST') or 'smtp.gmail.com'
EMAIL_PORT = os.environ.get('AUTHEMAIL_EMAIL_PORT') or 587
EMAIL_HOST_USER = os.environ.get('AUTHEMAIL_EMAIL_HOST_USER') or '<YOUR EMAIL_HOST_USER HERE>'
EMAIL_HOST_PASSWORD = os.environ.get('AUTHEMAIL_EMAIL_HOST_PASSWORD') or '<YOUR EMAIL_HOST_PASSWORD HERE>'
EMAIL_USE_TLS = True
EMAIL_USE_SSL = False

Release files for django-graphql-accounts 0.12

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-graphql-accounts 0.12
File Size Uploaded
django-graphql-accounts-0.12.tar.gz 10.5 kB Details

Release files / django-graphql-accounts-0.12.tar.gz

Download URL django-graphql-accounts-0.12.tar.gz
Size 10.5 kB
Tags Source
SHA-256 checksum
How to use checksums
c649de9a8d5b01d5e5b4698d32d7e7c05ab5bab9f7a70ec2c60ca735e8427e0f
BLAKE2b-256 checksum
How to use checksums
4586c6c167888a200e34be9159a0eef722f68f7d75e7914acd851ebb6fa126e4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.1 importlib_metadata/4.6.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.5

Release history Release notifications | RSS feed

This release

0.12 This release

1 release file

0.11

1 release file

0.10

1 release file

0.9

1 release file

0.8

1 release file

0.7

1 release file

0.6

1 release file

0.5

1 release file

0.4

1 release file

0.3

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page