Merge pull request 'Added login' (#20) from feature/authentication-in-browser into master
Reviewed-on: #20
This commit is contained in:
commit
ba37eeb6f4
21
config/authh.py
Normal file
21
config/authh.py
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
from django.conf import settings
|
||||||
|
from django.contrib.auth.backends import BaseBackend
|
||||||
|
from django.contrib.auth.hashers import check_password
|
||||||
|
from users.models import User
|
||||||
|
|
||||||
|
|
||||||
|
class SettingsBackend(BaseBackend):
|
||||||
|
|
||||||
|
def authenticate(self, request, email=None, password=None):
|
||||||
|
user = User.objects.get(email=email)
|
||||||
|
if check_password(password, user.password):
|
||||||
|
user_final = user
|
||||||
|
else:
|
||||||
|
user_final = ({"message": "bad"})
|
||||||
|
return user_final
|
||||||
|
|
||||||
|
def get_user(self, user_id):
|
||||||
|
try:
|
||||||
|
return User.objects.get(pk=user_id)
|
||||||
|
except User.DoesNotExist:
|
||||||
|
return None
|
@ -48,6 +48,7 @@ APPEND_SLASH = False
|
|||||||
INSTALLED_APPS = [
|
INSTALLED_APPS = [
|
||||||
'django.contrib.auth',
|
'django.contrib.auth',
|
||||||
'django.contrib.contenttypes',
|
'django.contrib.contenttypes',
|
||||||
|
'django.contrib.sessions',
|
||||||
'django.contrib.staticfiles',
|
'django.contrib.staticfiles',
|
||||||
"django.contrib.gis",
|
"django.contrib.gis",
|
||||||
"rest_framework",
|
"rest_framework",
|
||||||
@ -60,10 +61,12 @@ INSTALLED_APPS = [
|
|||||||
"questions",
|
"questions",
|
||||||
"categories"
|
"categories"
|
||||||
]
|
]
|
||||||
|
# AUTHENTICATION_BACKENDS = ['config.authh.SettingsBackend']
|
||||||
MIDDLEWARE = [
|
MIDDLEWARE = [
|
||||||
|
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||||
'django.middleware.security.SecurityMiddleware',
|
'django.middleware.security.SecurityMiddleware',
|
||||||
"corsheaders.middleware.CorsMiddleware",
|
"corsheaders.middleware.CorsMiddleware",
|
||||||
|
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||||
# "`debug_toolbar.middleware.DebugToolbarMiddleware`",
|
# "`debug_toolbar.middleware.DebugToolbarMiddleware`",
|
||||||
'django.middleware.common.CommonMiddleware',
|
'django.middleware.common.CommonMiddleware',
|
||||||
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
||||||
@ -113,9 +116,9 @@ REST_FRAMEWORK = {
|
|||||||
"DEFAULT_PERMISSION_CLASSES": (
|
"DEFAULT_PERMISSION_CLASSES": (
|
||||||
"rest_framework.permissions.IsAuthenticated",
|
"rest_framework.permissions.IsAuthenticated",
|
||||||
),
|
),
|
||||||
"DEFAULT_AUTHENTICATION_CLASSES": (
|
# "DEFAULT_AUTHENTICATION_CLASSES": (
|
||||||
"rest_framework_simplejwt.authentication.JWTAuthentication",
|
# "rest_framework_simplejwt.authentication.JWTAuthentication",
|
||||||
),
|
# ),
|
||||||
"DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.LimitOffsetPagination",
|
"DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.LimitOffsetPagination",
|
||||||
"DEFAULT_FILTER_BACKENDS": (
|
"DEFAULT_FILTER_BACKENDS": (
|
||||||
"django_filters.rest_framework.DjangoFilterBackend",
|
"django_filters.rest_framework.DjangoFilterBackend",
|
||||||
|
7
templates/great.html
Normal file
7
templates/great.html
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{% extends "authBase.html" %}
|
||||||
|
|
||||||
|
{% block title %}Log Out{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<p>zalogowano</p>
|
||||||
|
{% endblock %}
|
@ -1,16 +1,120 @@
|
|||||||
{% extends "authBase.html" %}
|
<html>
|
||||||
|
|
||||||
{% block title %}Log In{% endblock %}
|
<head>
|
||||||
|
<title>Login</title>
|
||||||
|
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
|
||||||
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
|
||||||
|
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.1/css/all.css" integrity="sha384-gfdkjb5BdAXd+lj+gudLWI+BXq4IuLW5IT+brZEZsLFm++aCMlF1V92rMkPaX4PP" crossorigin="anonymous">
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
<h2>Log In</h2>
|
<style>
|
||||||
<form action="">
|
body,
|
||||||
<p>Email</p>
|
html {
|
||||||
<input type="email" placeholder="Enter Email">
|
margin: 0;
|
||||||
<p>Password</p>
|
padding: 0;
|
||||||
<input type="password" placeholder="Enter Password">
|
height: 100%;
|
||||||
<input type="submit" value="Log in">
|
background: #7abecc !important;
|
||||||
<p><input type="checkbox">Remember Me</p>
|
}
|
||||||
|
.user_card {
|
||||||
|
width: 350px;
|
||||||
|
margin-top: auto;
|
||||||
|
margin-bottom: auto;
|
||||||
|
background: #74cfbf;
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
flex-direction: column;
|
||||||
|
padding: 10px;
|
||||||
|
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
|
||||||
|
-webkit-box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
|
||||||
|
-moz-box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
|
||||||
|
border-radius: 5px;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.form_container {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#form-title{
|
||||||
|
color: #fff;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.login_btn {
|
||||||
|
width: 100%;
|
||||||
|
background: #33ccff !important;
|
||||||
|
color: white !important;
|
||||||
|
}
|
||||||
|
.login_btn:focus {
|
||||||
|
box-shadow: none !important;
|
||||||
|
outline: 0px !important;
|
||||||
|
}
|
||||||
|
.login_container {
|
||||||
|
padding: 0 2rem;
|
||||||
|
}
|
||||||
|
.input-group-text {
|
||||||
|
background: #f7ba5b !important;
|
||||||
|
color: white !important;
|
||||||
|
border: 0 !important;
|
||||||
|
border-radius: 0.25rem 0 0 0.25rem !important;
|
||||||
|
}
|
||||||
|
.input_user,
|
||||||
|
.input_pass:focus {
|
||||||
|
box-shadow: none !important;
|
||||||
|
outline: 0px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#messages{
|
||||||
|
background-color: grey;
|
||||||
|
color: #fff;
|
||||||
|
padding: 10px;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container h-100">
|
||||||
|
<div class="d-flex justify-content-center h-100">
|
||||||
|
<div class="user_card">
|
||||||
|
<div class="d-flex justify-content-center">
|
||||||
|
|
||||||
|
|
||||||
|
<h3 id="form-title">LOGIN</h3>
|
||||||
|
</div>
|
||||||
|
<div class="d-flex justify-content-center form_container">
|
||||||
|
<form method="POST" action="">
|
||||||
|
{% csrf_token %}
|
||||||
|
<div class="input-group mb-3">
|
||||||
|
<div class="input-group-append">
|
||||||
|
<span class="input-group-text"><i class="fas fa-user"></i></span>
|
||||||
|
</div>
|
||||||
|
<input type="text" name="username" placeholder="Username..." class="form-control">
|
||||||
|
</div>
|
||||||
|
<div class="input-group mb-2">
|
||||||
|
<div class="input-group-append">
|
||||||
|
<span class="input-group-text"><i class="fas fa-key"></i></span>
|
||||||
|
</div>
|
||||||
|
<input type="password" name="password" placeholder="Password..." class="form-control" >
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="d-flex justify-content-center mt-3 login_container">
|
||||||
|
<input class="btn login_btn" type="submit" value="Login">
|
||||||
|
</div>
|
||||||
</form>
|
</form>
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mt-4">
|
||||||
|
<div class="d-flex justify-content-center links">
|
||||||
|
Don't have an account? <a href="{% url 'register' %}" class="ml-2">Sign Up</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
@ -3,7 +3,6 @@ from rest_framework import views
|
|||||||
from rest_framework import viewsets
|
from rest_framework import viewsets
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
|
|
||||||
from config.settings import BASE_DIR
|
|
||||||
from trials.models import Test
|
from trials.models import Test
|
||||||
from trials.serializers import TestSerializer
|
from trials.serializers import TestSerializer
|
||||||
|
|
||||||
@ -15,9 +14,6 @@ class TestModelViewSet(viewsets.ModelViewSet):
|
|||||||
|
|
||||||
class TestTemplateView(TemplateView):
|
class TestTemplateView(TemplateView):
|
||||||
|
|
||||||
permission_classes = []
|
|
||||||
template_name = BASE_DIR + f"/templates/generic_test.html"
|
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
return Test.objects.all()
|
return Test.objects.all()
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ from django.urls import path
|
|||||||
from users.views import UserModelViewSet
|
from users.views import UserModelViewSet
|
||||||
from rest_framework_simplejwt.views import TokenObtainPairView
|
from rest_framework_simplejwt.views import TokenObtainPairView
|
||||||
from rest_framework_simplejwt.views import TokenRefreshView
|
from rest_framework_simplejwt.views import TokenRefreshView
|
||||||
from .views import PasswordReset, UserPasswordResetConfirmView, RegisterViewSet, login, logout, register, register_success
|
from .views import PasswordReset, UserPasswordResetConfirmView, RegisterViewSet, login, logout, register, register_success, loginn, login_success
|
||||||
|
|
||||||
|
|
||||||
router = DefaultRouter(trailing_slash=False)
|
router = DefaultRouter(trailing_slash=False)
|
||||||
@ -13,9 +13,10 @@ router.register("items", UserModelViewSet)
|
|||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path("", include(router.urls)),
|
path("", include(router.urls)),
|
||||||
path('login', login, name='login'),
|
path('login', loginn, name='login'),
|
||||||
path('logout', logout, name='logout'),
|
path('logout', logout, name='logout'),
|
||||||
path('register/success', register_success, name='register_success'),
|
path('register/success', register_success, name='register_success'),
|
||||||
|
path('login/success', login_success, name='login_success'),
|
||||||
# path('register', RegisterViewSet.as_view(), name='register'),
|
# path('register', RegisterViewSet.as_view(), name='register'),
|
||||||
path('register', register, name='register'),
|
path('register', register, name='register'),
|
||||||
path('api/token', TokenObtainPairView.as_view(), name='token_obtain_pair'),
|
path('api/token', TokenObtainPairView.as_view(), name='token_obtain_pair'),
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
from django.http import HttpResponseRedirect
|
||||||
from rest_framework import viewsets
|
from rest_framework import viewsets
|
||||||
|
|
||||||
from users.models import User
|
from users.models import User
|
||||||
@ -10,7 +11,10 @@ from rest_framework.response import Response
|
|||||||
from django.shortcuts import render, redirect
|
from django.shortcuts import render, redirect
|
||||||
from django.template import loader
|
from django.template import loader
|
||||||
from .forms import RegistrationForm
|
from .forms import RegistrationForm
|
||||||
|
from django.contrib.auth.forms import AuthenticationForm
|
||||||
|
from django.contrib.auth import login as auth_login
|
||||||
|
from config.authh import SettingsBackend
|
||||||
|
from django.contrib.auth.decorators import login_required
|
||||||
|
|
||||||
|
|
||||||
class UserModelViewSet(viewsets.ModelViewSet):
|
class UserModelViewSet(viewsets.ModelViewSet):
|
||||||
@ -99,3 +103,19 @@ def register(request):
|
|||||||
form = RegistrationForm()
|
form = RegistrationForm()
|
||||||
context['registration_form'] = form
|
context['registration_form'] = form
|
||||||
return render(request, 'register.html', context)
|
return render(request, 'register.html', context)
|
||||||
|
|
||||||
|
|
||||||
|
def login_success(request):
|
||||||
|
return render(request, 'great.html')
|
||||||
|
|
||||||
|
|
||||||
|
def loginn(request):
|
||||||
|
if request.POST:
|
||||||
|
username = request.POST.get("username")
|
||||||
|
password = request.POST.get("password")
|
||||||
|
|
||||||
|
user = SettingsBackend().authenticate(request, email=username, password=password)
|
||||||
|
if user is not None:
|
||||||
|
auth_login(request, user)
|
||||||
|
context = {}
|
||||||
|
return render(request, 'login.html', context)
|
||||||
|
Loading…
Reference in New Issue
Block a user