redy: bad authentication

This commit is contained in:
e-serg 2024-04-13 22:34:46 +03:00
parent 33cb16af3f
commit 9c88d1be60
7 changed files with 89 additions and 25 deletions

View File

@ -0,0 +1,27 @@
/* шрифт для лого */
@import url('https://fonts.googleapis.com/css2?family=Lobster&display=swap');
/*@import url('https://fonts.googleapis.com/css2?family=Amatic+SC:wght@700&display=swap');*/
/*@import url('https://fonts.googleapis.com/css2?family=Kurale&display=swap');*/
/* НАВИГАЦИЯ */
.navbar {
background: rgb(111,66,193);
background: linear-gradient(11deg, rgba(111,66,193,1) 15%, rgba(152,66,193,0.7) 70%);
height: 75px;
}
.navbar > div.container-fluid > a.navbar-brand {
font-family: "Lobster", sans-serif;
font-weight: 400;
font-style: normal;
font-size: 11pt;
color: #fff;
}
.modal {
background: rgb(33, 20, 56);
background: linear-gradient(11deg, rgb(33, 20, 56, 1) 15%, rgba(49, 22, 64, 0.6) 70%);
}
.modal > .modal-dialog > .modal-content .modal-header,
.modal > .modal-dialog > .modal-content .modal-footer {
background: whitesmoke;
}

View File

@ -27,6 +27,7 @@ urlpatterns = [
re_path(r'^$', views.index),
re_path(r'^logout$', views.my_logout),
re_path(r'^login$', views.my_login),
re_path(r'^not-auth$', views.not_auth),
]
# Обработчики ошибок

View File

@ -16,7 +16,7 @@ def index(request: HttpRequest) -> HttpResponse:
# except (TemplateDoesNotExist, TemplateSyntaxError) as e:
# # Обработка ошибки отсутствия шаблона
# return HttpResponse(f"Не нашли шаблон или в нем ошибка \"{e}\".", status=424)
return render(request, "index.jinja", {})
return render(request, template_name="index.jinja", context={})
def my_logout(request: HttpRequest) -> HttpResponseRedirect:
@ -26,7 +26,7 @@ def my_logout(request: HttpRequest) -> HttpResponseRedirect:
:return response: исходящий http-ответ
"""
logout(request)
return HttpResponseRedirect('/')
return HttpResponseRedirect(redirect_to='/')
def my_login(request: HttpRequest) -> HttpResponseRedirect:
@ -35,18 +35,27 @@ def my_login(request: HttpRequest) -> HttpResponseRedirect:
:param
:return response: исходящий http-ответ
"""
try:
print(request.POST)
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
print(username, password)
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
# A backend authenticated the credentials
print(f"{user} is authenticated")
user = authenticate(request,
username=request.POST['username'],
password=request.POST['password'])
if user is None:
# return HttpResponse('Пользователь не найден', status=304)
return HttpResponseRedirect(redirect_to='/not-auth')
else:
# No backend authenticated the credentials
pass
# request.session['user'] = request.POST.get('login')
login(request, user)
return HttpResponseRedirect('/')
except KeyError:
return HttpResponseRedirect('/')
def not_auth(request: HttpRequest) -> HttpResponse:
""" Страница для неавторизованных пользователей
:param
:return response: исходящий http-ответ
"""
to_template = {"META_REFRESH": "15; url=/"}
return render(request, template_name="not_auth.jinja", context=to_template, status=401)

View File

@ -19,7 +19,7 @@
<meta name="robots" content="index,follow" />
<meta name="revisit-after" content="15 days">
<meta name="document-state" content="{{ META_DOCUMENT_STATE|default:'Dynamic' }}" />
<meta http-equiv="refresh" content="{{ META_REFRESH|default:'86400' }}" >
<meta name="format-detection" content="telephone=no" />
<meta name="theme-color" content="#F5F5F5" /><!-- theme-color предоставляет браузерам цвет CSS для настройки
отображения страницы или окружающего пользовательского интерфейса. -->
@ -38,7 +38,7 @@
</head>
<body>{% block BODY %}
{% block Top_CSS1 %}{% endblock %}{% block Top_CSS2 %}{% endblock %}{% block Top_CSS3 %}{% endblock %}{% include "blocks/header_nav.jinja" %}
{# {% block CONTENT %}{% endblock CONTENT %}#}
{% block CONTENT %}{% endblock CONTENT %}
{# {% include "blocks/footer.jinja" %} #}{# {% if COOKIES %}#}
{# {% include "blocks/accept-cookies.jinja2" %}{% endif %} #}

View File

@ -1,6 +1,6 @@
{# ВЕРХНЯЯ НАВИГАЦИЯ #}<nav class="navbar">
<div class="container-fluid">
<a class="navbar-brand mb-0 h1" href="\">Тестовое задание Frontend</a>
<a class="navbar-brand mb-0 h1" href="/">Тестовое задание Frontend</a>
<div class="navbar-nav ms-auto"><nobr>{% if request.user.is_authenticated %}
<i class="fa-solid fa-user"></i> {{ user }}
<a class="btn btn-secondary btn-sm ms-3"href="/logout">выход
@ -13,4 +13,3 @@
</div>
</div>
</nav>{% include "popup/logon-logout.jinja" %}

View File

@ -0,0 +1,28 @@
{% extends 'base.jinja' %}
{% block CONTENT %}<!-- Modal warning / bad login -->
<div class="modal fade" id="bad_login_modal" tabindex="-1" aria-labelledby="bad_login_modal_Label" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content shadow">
<div class="modal-header">
<h3 class="modal-title fs-5" id="bad_login_modal_Label">ошибка аутентификации</h3>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<h1 class="text-danger-emphasis"><i class="fa-regular fa-circle-xmark"></i> Ошибка</h1>
<p>Введен неверный логин или пароль.</p>
<p>Будьте внимательно после нескольких попыток ваш IP будет заблокирован!</p>
</div>
<div class="modal-footer">
<a href="/" class="btn btn-primary">Я больше не буду</a>
</div>
</div>
</div>
</div>
{% endblock CONTENT %}
{% block Top_JS1 %}<script type="text/javascript">
$(document).ready(function() {
$('#bad_login_modal').modal('show');
});
</script>
{% endblock Top_JS1 %}

View File

@ -1,12 +1,12 @@
<!-- Login/Logout Modal -->
<div class="modal fade" id="login_modal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal fade" id="login_modal" tabindex="-1" aria-labelledby="login_modal_Label" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content shadow">
<div class="modal-header">
<h3 class="modal-title fs-5" id="exampleModalLabel">вход/выход</h3>
<h3 class="modal-title fs-5" id="login_modal_Label">вход/выход</h3>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<form action="\login" method="post">
<form action="/login" method="post">
{% csrf_token %}
<div class="modal-body">
<div class="input-group flex-nowrap my-4">