Skip to content

juliolvfilho/drf-firebase-authentication

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Django Rest Framework Firebase Authentication

PyPI PyPI - License

This package provides a base Firebase Authentication backend class for the Django rest framework. Two key methods are not implemented for more flexebility. Let's keep it simple, stupid.

Requirements

Installation

pip install drf-firebase-authentication

Usage

1. Subclass BaseFirebaseAuthentication and implement its template methods:

Decide by yourself how you want to associate Firebase users with local django users by implementing the .get_django_user() method accordingly.

Put your code into a authentication.py file inside an app dedicated to your projects REST Api.

from drf_firebase.authentication import BaseFirebaseAuthentication
from firebase_admin import credentials, initialize_app
from django.contrib.auth import get_user_model

firebase_creds = credentials.Certificate('path/to/firebase/credentials.json')
firebase_app = initialize_app(firebase_creds)

class FirebaseAuthentication(BaseFirebaseAuthentication):
	"""
	Example implementation of a DRF Firebase Authentication backend class
	"""
	def get_firebase_app(self):
		return firebase_app

	def get_django_user(self, firebase_user_record):
		return get_user_model().objects.get_or_create(
			username=firebase_user_record.uid,
		)[0]

2. Add the just created Firebase authentication backend to your settings.py:

Replace YOUR_RESTAPI_APP with the app you put your authentication.py file in.

REST_FRAMEWORK = {
	'DEFAULT_AUTHENTICATION_CLASSES': (
		'rest_framework.authentication.SessionAuthentication', # default
		'rest_framework.authentication.BasicAuthentication', # default
		'YOUR_RESTAPI_APP.authentication.FirebaseAuthentication',
	),
}

About

A flexible Django Rest Framework Firebase authentication class.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%