diff --git a/requirements.txt b/requirements.txt
index 4edebd6b0646bd3afbc9d5f613964dea13a26e24..a91f63d57c3079644b13d1ad135659ac67728414 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -11,3 +11,4 @@ pytest-django
 pytest-mock
 faker
 coverage
+social-auth-app-django
diff --git a/sage_validation/file_validator/views.py b/sage_validation/file_validator/views.py
index e7c4002a2b40098f0be4fc2040bab3538d2908e4..9bea9c62dbbe4097776cb983ae8c3fdf94ea9b4a 100644
--- a/sage_validation/file_validator/views.py
+++ b/sage_validation/file_validator/views.py
@@ -7,6 +7,7 @@ from django.shortcuts import render
 from django.urls import reverse_lazy
 from django.utils import timezone
 from rest_framework import status
+from rest_framework.permissions import IsAuthenticated
 from rest_framework.request import Request
 from rest_framework.response import Response
 from rest_framework.views import APIView
@@ -28,6 +29,7 @@ def upload_page_view(request: HttpRequest) -> HttpResponse:
 
 class CSVUploadAPIView(APIView):
     """API view for uploading a CSV file."""
+    permission_classes = [IsAuthenticated]
 
     def post(self, request: Request) -> Response:
         """Handle CSV upload and validation."""
diff --git a/sage_validation/settings.py b/sage_validation/settings.py
index 8e1a0ff1a59f67f2b62dddd01f7dd7442b8d7950..dea87dfa91892f806ec417b7d6a81d138a115ee5 100644
--- a/sage_validation/settings.py
+++ b/sage_validation/settings.py
@@ -9,6 +9,7 @@ For the full list of settings and their values, see
 https://docs.djangoproject.com/en/5.1/ref/settings/
 """
 import os
+from datetime import timedelta
 from pathlib import Path
 
 # Build paths inside the project like this: BASE_DIR / 'subdir'.
@@ -27,6 +28,9 @@ ALLOWED_HOSTS: list[str] = os.getenv("ALLOWED_HOSTS", "").split(",")
 
 # Application definition
 INSTALLED_APPS = [
+    "rest_framework",
+    "rest_framework.authtoken",
+    "social_django",
     "django.contrib.admin",
     "django.contrib.auth",
     "django.contrib.contenttypes",
@@ -49,6 +53,7 @@ MIDDLEWARE = [
     "django.middleware.csrf.CsrfViewMiddleware",
     "django.contrib.auth.middleware.AuthenticationMiddleware",
     "django.contrib.messages.middleware.MessageMiddleware",
+    "social_django.middleware.SocialAuthExceptionMiddleware",
     "django.middleware.clickjacking.XFrameOptionsMiddleware",
 ]
 
@@ -65,6 +70,8 @@ TEMPLATES = [
                 "django.template.context_processors.request",
                 "django.contrib.auth.context_processors.auth",
                 "django.contrib.messages.context_processors.messages",
+                'social_django.context_processors.backends',
+                'social_django.context_processors.login_redirect',
             ],
         },
     },
@@ -147,3 +154,17 @@ MEDIA_ROOT = os.getenv("MEDIA_ROOT", BASE_DIR / "media")
 MEDIA_URL = '/media/'
 
 CSRF_TRUSTED_ORIGINS = os.getenv("CSRF_TRUSTED_ORIGINS", "").split(",")
+AUTHENTICATION_BACKENDS = (
+    "social_core.backends.google.GoogleOAuth2",
+    "django.contrib.auth.backends.ModelBackend",
+)
+
+SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = "323196535105-k0dqcfcusmrvb99iok1pui978age9bb8.apps.googleusercontent.com"
+SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = "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"
+
+SOCIAL_AUTH_GOOGLE_OAUTH2_SCOPE = ["email", "profile"]
+SOCIAL_AUTH_GOOGLE_OAUTH2_REDIRECT_URI = "http://localhost:8000/complete/google-oauth2/"
+SOCIAL_AUTH_JSONFIELD_ENABLED = True
+SOCIAL_AUTH_URL_NAMESPACE = 'social'
+LOGIN_REDIRECT_URL = "/"
+SOCIAL_AUTH_ALLOW_DISCONNECT = True
\ No newline at end of file
diff --git a/sage_validation/templates/base.html b/sage_validation/templates/base.html
index 20f3c23d95c69128f00d91f7a9e74061ec522528..38f87f469a4eef03fc6c3e6485c877e00e6d3420 100644
--- a/sage_validation/templates/base.html
+++ b/sage_validation/templates/base.html
@@ -18,7 +18,16 @@
             <a href="{% url "index" %}" class="text-white text-2xl font-bold tracking-wide">Sage Validation</a> <!-- Made title clickable -->
         </div>
         <div class="flex items-center"> <!-- Login link -->
-            <a href="/login" class="text-white hover:text-gray-300">Login</a>
+            {% if user.is_authenticated %}
+                <p class="text-white">Welcome, {{ user.username }}!</p>
+                {#                <a href="{% url 'social:disconnect' 'google-oauth2' %}" class="text-white hover:text-gray-300">Logout</a>#}
+{#                <form action="{% url 'social:disconnect' 'google-oauth2' %}" method="post">#}
+{#                    {% csrf_token %}#}
+{#                    <button type="submit">Logout</button>#}
+{#                </form>#}
+            {% else %}
+                <a href="{% url "social:begin" "google-oauth2" %}" class="text-white hover:text-gray-300">Login</a>
+            {% endif %}
             <button id="mobile-menu-button" class="md:hidden text-white focus:outline-none ml-4">
                 <svg class="h-6 w-6" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
                     <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16m-7 6h7"></path>
diff --git a/sage_validation/urls.py b/sage_validation/urls.py
index af6d6158c155dd64a21c7170bb90f05d1fc7020d..f839b99fab7178d94eebbc22b43e4d2306dd9db3 100644
--- a/sage_validation/urls.py
+++ b/sage_validation/urls.py
@@ -9,5 +9,6 @@ urlpatterns = [
     path("admin/", admin.site.urls),
     path("file-validator/", include("sage_validation.file_validator.urls")),
     path("", index_view, name="index"),
+    path("", include("social_django.urls", namespace="social"))
 
 ]