Skip to content
This repository was archived by the owner on Feb 2, 2022. It is now read-only.

Firebase auth #3

Merged
merged 3 commits into from
Dec 7, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .gcloudignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,6 @@
# Python pycache:
__pycache__/
# Ignored by the build system
/setup.cfg
/setup.cfg
# Secrets
/secrets
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ media
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
secrets/*
secrets/

# Gradle
.idea/**/gradle.xml
Expand Down
13 changes: 12 additions & 1 deletion AdvancedDevelopment/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@
For the full list of settings and their values, see
https://docs.djangoproject.com/en/3.2/ref/settings/
"""

import os
from pathlib import Path
import firebase_admin
from firebase_admin import credentials

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
Expand Down Expand Up @@ -49,6 +51,12 @@
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'FirebaseAuth.authentication.FirebaseAuthentication',
]
}

ROOT_URLCONF = 'AdvancedDevelopment.urls'

TEMPLATES = [
Expand Down Expand Up @@ -124,3 +132,6 @@
# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

cred = credentials.Certificate(os.path.join(BASE_DIR, "secrets/advanced-development-333919-25398fb03356.json"))
firebase_admin.initialize_app(cred)
Empty file added FirebaseAuth/__init__.py
Empty file.
3 changes: 3 additions & 0 deletions FirebaseAuth/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from django.contrib import admin

# Register your models here.
6 changes: 6 additions & 0 deletions FirebaseAuth/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from django.apps import AppConfig


class FirebaseauthConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'FirebaseAuth'
30 changes: 30 additions & 0 deletions FirebaseAuth/authentication.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
from django.contrib.auth.models import User
from django.core.exceptions import ObjectDoesNotExist
from rest_framework import authentication
from rest_framework import exceptions
import firebase_admin as admin
import firebase_admin.auth as auth


class FirebaseAuthentication(authentication.BaseAuthentication):
"""
https://jrizmal.medium.com/how-to-authenticate-firebase-users-in-django-rest-framework-c2d90f5a0a11
"""
def authenticate(self, request):

token = request.headers.get('Authorization')
if not token:
return None

try:
decoded_token = auth.verify_id_token(token)
uid = decoded_token["uid"]
except:
return None

try:
user = User.objects.get(username=uid)
return user, None

except ObjectDoesNotExist:
return None
Empty file.
3 changes: 3 additions & 0 deletions FirebaseAuth/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from django.db import models

# Create your models here.
3 changes: 3 additions & 0 deletions FirebaseAuth/tests.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from django.test import TestCase

# Create your tests here.
3 changes: 3 additions & 0 deletions FirebaseAuth/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from django.shortcuts import render

# Create your views here.