Spaces:
Running
Running
Commit
·
7f70ff6
1
Parent(s):
6bf314a
Add login requirement middleware and update views for authentication check
Browse files- Implement LoginRequiredMiddleware to restrict access to authenticated users.
- Modify home_page view to render 'must_login.html' for unauthenticated users.
- Create must_login.html template to prompt users to log in.
- Update base.html to include a favicon.
- Adjust footer content for clarity and contact information.
- BridgeMentor/middleware/login_required_middleware.py +25 -0
- BridgeMentor/settings.py +2 -0
- core/templates/base.html +10 -2
- core/templates/must_login.html +14 -0
- core/views.py +4 -1
BridgeMentor/middleware/login_required_middleware.py
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# middleware/login_required_middleware.py
|
2 |
+
|
3 |
+
from django.shortcuts import redirect
|
4 |
+
from django.conf import settings
|
5 |
+
from django.urls import resolve
|
6 |
+
|
7 |
+
|
8 |
+
EXEMPT_URLS = {'login', 'signup', 'home', 'begin',
|
9 |
+
'index', 'complete', 'admin:index', 'admin:login'}
|
10 |
+
|
11 |
+
|
12 |
+
class LoginRequiredMiddleware:
|
13 |
+
def __init__(self, get_response):
|
14 |
+
self.get_response = get_response
|
15 |
+
|
16 |
+
def __call__(self, request):
|
17 |
+
if not request.user.is_authenticated:
|
18 |
+
try:
|
19 |
+
url_name = resolve(request.path_info).url_name
|
20 |
+
print(f"Unautenticated URL name: {url_name}")
|
21 |
+
if url_name not in EXEMPT_URLS:
|
22 |
+
return redirect('/')
|
23 |
+
except Exception as e:
|
24 |
+
return redirect('/')
|
25 |
+
return self.get_response(request)
|
BridgeMentor/settings.py
CHANGED
@@ -56,6 +56,8 @@ MIDDLEWARE = [
|
|
56 |
'django.middleware.common.CommonMiddleware',
|
57 |
'django.middleware.csrf.CsrfViewMiddleware',
|
58 |
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
|
|
|
|
59 |
'django.contrib.messages.middleware.MessageMiddleware',
|
60 |
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
61 |
]
|
|
|
56 |
'django.middleware.common.CommonMiddleware',
|
57 |
'django.middleware.csrf.CsrfViewMiddleware',
|
58 |
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
59 |
+
'BridgeMentor.middleware.login_required_middleware.LoginRequiredMiddleware',
|
60 |
+
|
61 |
'django.contrib.messages.middleware.MessageMiddleware',
|
62 |
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
63 |
]
|
core/templates/base.html
CHANGED
@@ -5,6 +5,9 @@
|
|
5 |
<head>
|
6 |
<meta charset="UTF-8">
|
7 |
<title>{% block title %}{% endblock %} - BridgeMentor</title>
|
|
|
|
|
|
|
8 |
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
|
9 |
<link rel="stylesheet" type="text/css" href="{% static 'base.css' %}">
|
10 |
{% block css %}{% endblock %}
|
@@ -56,9 +59,14 @@
|
|
56 |
</main>
|
57 |
|
58 |
<!-- Footer -->
|
59 |
-
<footer class="bg-dark text-white text-center py-
|
60 |
<div class="container">
|
61 |
-
<p
|
|
|
|
|
|
|
|
|
|
|
62 |
</div>
|
63 |
</footer>
|
64 |
|
|
|
5 |
<head>
|
6 |
<meta charset="UTF-8">
|
7 |
<title>{% block title %}{% endblock %} - BridgeMentor</title>
|
8 |
+
<link rel="icon"
|
9 |
+
href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>🔍</text></svg>">
|
10 |
+
|
11 |
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
|
12 |
<link rel="stylesheet" type="text/css" href="{% static 'base.css' %}">
|
13 |
{% block css %}{% endblock %}
|
|
|
59 |
</main>
|
60 |
|
61 |
<!-- Footer -->
|
62 |
+
<footer class="bg-dark text-white text-center py-1 mt-auto">
|
63 |
<div class="container">
|
64 |
+
<p>© 2025 BridgeMentor. All rights reserved. v0.001, α-testing </p>
|
65 |
+
<p>
|
66 |
+
If you experience any problem or have any queries/suggestions, feel free to contact
|
67 |
+
<a href="https://www.sushant.info.np/#:~:text=touch" class="text-white text-decoration-underline"
|
68 |
+
target="_blank">Sushant Gautam</a>.
|
69 |
+
</p>
|
70 |
</div>
|
71 |
</footer>
|
72 |
|
core/templates/must_login.html
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{% extends "base.html" %}
|
2 |
+
|
3 |
+
{% block title %}Login Required{% endblock %}
|
4 |
+
|
5 |
+
{% block content %}
|
6 |
+
<div class="d-flex justify-content-center align-items-center" style="height: 60vh;">
|
7 |
+
<div class="text-center">
|
8 |
+
<h2>You must login to access the platform.</h2>
|
9 |
+
<a href="{% url 'social:begin' 'google-oauth2' %}" class="btn btn-primary mt-3">
|
10 |
+
Login with Google
|
11 |
+
</a>
|
12 |
+
</div>
|
13 |
+
</div>
|
14 |
+
{% endblock %}
|
core/views.py
CHANGED
@@ -10,7 +10,10 @@ from BridgeMentor.utils import refresh_author_db
|
|
10 |
|
11 |
|
12 |
def home_page(request):
|
13 |
-
|
|
|
|
|
|
|
14 |
|
15 |
|
16 |
def refresh_author_db_view(request):
|
|
|
10 |
|
11 |
|
12 |
def home_page(request):
|
13 |
+
if request.user.is_authenticated:
|
14 |
+
return render(request, 'home.html')
|
15 |
+
else:
|
16 |
+
return render(request, "must_login.html")
|
17 |
|
18 |
|
19 |
def refresh_author_db_view(request):
|