Commit 3e735293 authored by impfundev's avatar impfundev

feat: auth with built in django auth

parent 53cc14f6
JWT_SECRET= #SECURE RANDOM SECREET JWT_SECRET= #SECURE RANDOM SECREET
### Database ### Database
PGHOST="" DB_HOST=""
PGDATABASE="" DB_NAME=""
PGUSER="" DB_USER=""
PGPASSWORD="" DB_PASSWORD=""
\ No newline at end of file \ No newline at end of file
...@@ -2,16 +2,32 @@ from datetime import datetime ...@@ -2,16 +2,32 @@ from datetime import datetime
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from rest_framework import serializers from rest_framework import serializers
from users.models import Role
from books.models import Book, Category from books.models import Book, Category
from members.models import Members from members.models import Members
from book_loans.models import BookLoans from book_loans.models import BookLoans
from librarians.models import Librarians from librarians.models import Librarians
class RoleSerializer(serializers.ModelSerializer):
class Meta:
model = Role
fields = "__all__"
class UserSerializer(serializers.ModelSerializer): class UserSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = get_user_model() model = get_user_model()
fields = "__all__" fields = [
"username",
"email",
"password",
"first_name",
"last_name",
"is_staff",
]
class CategorySerializer(serializers.ModelSerializer): class CategorySerializer(serializers.ModelSerializer):
......
from django.urls import path, include from django.urls import path, include
from rest_framework import routers from rest_framework import routers
from dj_rest_auth.views import LogoutView
from api.views import ( from api.views import (
UserViewSet, UserViewSet,
BookViewSet, BookViewSet,
...@@ -16,6 +17,7 @@ from api.views import ( ...@@ -16,6 +17,7 @@ from api.views import (
OverduedBookLoanViewSet, OverduedBookLoanViewSet,
UpComingBookLoanViewSet, UpComingBookLoanViewSet,
MemberLoanViewSet, MemberLoanViewSet,
LoginUserView,
) )
router = routers.DefaultRouter() router = routers.DefaultRouter()
...@@ -66,4 +68,15 @@ urlpatterns = [ ...@@ -66,4 +68,15 @@ urlpatterns = [
include(router_member.urls), include(router_member.urls),
name="member_loans", name="member_loans",
), ),
# auth beta
path(
"auth/beta/login/",
LoginUserView.as_view(),
name="auth_login_beta",
),
path(
"auth/beta/logout/",
LogoutView.as_view(),
name="auth_login_beta",
),
] ]
...@@ -26,9 +26,58 @@ from api.serializers import ( ...@@ -26,9 +26,58 @@ from api.serializers import (
) )
from librarians.models import LoginHistory from librarians.models import LoginHistory
from users.models import User
from dj_rest_auth.views import LoginView
class LoginUserView(LoginView):
def get_response(self):
if self.user.is_staff:
return Response(
{"message": "Login as librarian success"},
status=status.HTTP_200_OK,
)
else:
return Response(
{"message": "Login as member success"},
status=status.HTTP_200_OK,
)
class RegisterUserView(views.APIView):
def pos(self, request):
data = request.data
is_username = User.objects.filter(username=data.username)
if is_username.exists():
return Response(
{
"message": "Register failed: Username is already used, please used another username"
},
status=status.HTTP_400_BAD_REQUEST,
)
is_email = User.objects.filter(email=data.email)
if is_email.exists():
return Response(
{
"messagge": "Register failed: Email is already used, please used another email"
},
status=status.HTTP_400_BAD_REQUEST,
)
User.objects.create(data)
user = User.objects.get(username=data.username)
return Response(
{"messagge": "Register Success"},
status=status.HTTP_400_BAD_REQUEST,
)
class UserViewSet(viewsets.ModelViewSet): class UserViewSet(viewsets.ModelViewSet):
permission_classes = [IsAuthenticated] # permission_classes = [IsAuthenticated]
queryset = get_user_model().objects.all().order_by("id") queryset = get_user_model().objects.all().order_by("id")
serializer_class = UserSerializer serializer_class = UserSerializer
......
...@@ -53,6 +53,7 @@ INSTALLED_APPS = [ ...@@ -53,6 +53,7 @@ INSTALLED_APPS = [
"dj_rest_auth.registration", "dj_rest_auth.registration",
# local # local
"api.apps.ApiConfig", "api.apps.ApiConfig",
"users.apps.UsersConfig",
"books.apps.BooksConfig", "books.apps.BooksConfig",
"categories.apps.CategoriesConfig", "categories.apps.CategoriesConfig",
"members.apps.MembersConfig", "members.apps.MembersConfig",
...@@ -68,7 +69,6 @@ INSTALLED_APPS = [ ...@@ -68,7 +69,6 @@ INSTALLED_APPS = [
REST_FRAMEWORK = { REST_FRAMEWORK = {
"DEFAULT_AUTHENTICATION_CLASSES": [ "DEFAULT_AUTHENTICATION_CLASSES": [
"rest_framework.authentication.SessionAuthentication",
"rest_framework.authentication.TokenAuthentication", "rest_framework.authentication.TokenAuthentication",
], ],
"DEFAULT_FILTER_BACKENDS": ["django_filters.rest_framework.DjangoFilterBackend"], "DEFAULT_FILTER_BACKENDS": ["django_filters.rest_framework.DjangoFilterBackend"],
......
# Generated by Django 5.0.6 on 2024-07-12 02:28
import uuid
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('librarians', '0008_alter_librarians_email_alter_librarians_uuid'),
]
operations = [
migrations.AlterField(
model_name='librarians',
name='uuid',
field=models.UUIDField(default=uuid.UUID('ccb160bd-804f-4527-bcbd-333de301dfc2')),
),
]
# Generated by Django 5.0.6 on 2024-07-12 02:45
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('librarians', '0009_alter_librarians_uuid'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.RemoveField(
model_name='librarians',
name='email',
),
migrations.RemoveField(
model_name='librarians',
name='name',
),
migrations.RemoveField(
model_name='librarians',
name='password',
),
migrations.RemoveField(
model_name='librarians',
name='uuid',
),
migrations.AddField(
model_name='librarians',
name='picture',
field=models.ImageField(blank=True, null=True, upload_to='uploads'),
),
migrations.AddField(
model_name='librarians',
name='user',
field=models.OneToOneField(default=1, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
preserve_default=False,
),
]
# Generated by Django 5.0.6 on 2024-07-12 03:10
import datetime
import uuid
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('librarians', '0010_remove_librarians_email_remove_librarians_name_and_more'),
]
operations = [
migrations.RemoveField(
model_name='librarians',
name='picture',
),
migrations.RemoveField(
model_name='librarians',
name='user',
),
migrations.AddField(
model_name='librarians',
name='email',
field=models.EmailField(default=datetime.datetime(2024, 7, 12, 3, 9, 56, 642818, tzinfo=datetime.timezone.utc), max_length=254),
preserve_default=False,
),
migrations.AddField(
model_name='librarians',
name='name',
field=models.CharField(default=datetime.datetime(2024, 7, 12, 3, 10, 0, 628769, tzinfo=datetime.timezone.utc), max_length=50),
preserve_default=False,
),
migrations.AddField(
model_name='librarians',
name='password',
field=models.CharField(default=datetime.datetime(2024, 7, 12, 3, 10, 3, 855783, tzinfo=datetime.timezone.utc), max_length=255),
preserve_default=False,
),
migrations.AddField(
model_name='librarians',
name='uuid',
field=models.UUIDField(default=uuid.UUID('54ab208e-edb8-459a-8bb6-3aa3bc7b5a3c')),
),
]
# Generated by Django 5.0.6 on 2024-07-12 03:29
import uuid
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('librarians', '0011_remove_librarians_picture_remove_librarians_user_and_more'),
]
operations = [
migrations.AlterField(
model_name='librarians',
name='uuid',
field=models.UUIDField(default=uuid.UUID('6ef57b61-22f2-4a91-ade4-2b1b19a10cf9')),
),
]
# Generated by Django 5.0.6 on 2024-07-12 03:43
import uuid
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('librarians', '0012_alter_librarians_uuid'),
]
operations = [
migrations.AlterField(
model_name='librarians',
name='uuid',
field=models.UUIDField(default=uuid.UUID('ff71097d-c72c-4989-9905-fa63f177b313')),
),
]
# Generated by Django 5.0.6 on 2024-07-12 03:46
import uuid
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('librarians', '0013_alter_librarians_uuid'),
]
operations = [
migrations.AlterField(
model_name='librarians',
name='uuid',
field=models.UUIDField(default=uuid.UUID('e9657dfd-1678-4fc2-8492-0ceebf8f5642')),
),
]
# Generated by Django 5.0.6 on 2024-07-12 03:48
import uuid
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('librarians', '0014_alter_librarians_uuid'),
]
operations = [
migrations.AlterField(
model_name='librarians',
name='uuid',
field=models.UUIDField(default=uuid.UUID('856f10d7-725c-46fc-91bc-fa4ae15171f7')),
),
]
# Generated by Django 5.0.6 on 2024-07-12 03:51
import uuid
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('librarians', '0015_alter_librarians_uuid'),
]
operations = [
migrations.AlterField(
model_name='librarians',
name='uuid',
field=models.UUIDField(default=uuid.UUID('0d98bb0f-7a0c-4bd5-af24-c8c24cc3a0f2')),
),
]
# Generated by Django 5.0.6 on 2024-07-12 03:57
import uuid
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('librarians', '0016_alter_librarians_uuid'),
]
operations = [
migrations.AlterField(
model_name='librarians',
name='uuid',
field=models.UUIDField(default=uuid.UUID('6fed0670-22bc-4ae9-9cd5-d1e1f37aa012')),
),
]
# Generated by Django 5.0.6 on 2024-07-12 04:07
import uuid
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('librarians', '0017_alter_librarians_uuid'),
]
operations = [
migrations.AlterField(
model_name='librarians',
name='uuid',
field=models.UUIDField(default=uuid.UUID('e8bae497-c18d-4c63-bd04-317ee34edab7')),
),
]
# Generated by Django 5.0.6 on 2024-07-12 02:28
import uuid
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('members', '0024_alter_members_account_number_alter_members_email_and_more'),
]
operations = [
migrations.AlterField(
model_name='members',
name='account_number',
field=models.CharField(default='745450367912390', editable=False, max_length=15),
),
migrations.AlterField(
model_name='members',
name='uuid',
field=models.UUIDField(default=uuid.UUID('a84677d7-26d5-4656-b702-b3910c01c46b')),
),
]
# Generated by Django 5.0.6 on 2024-07-12 02:45
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('members', '0025_alter_members_account_number_alter_members_uuid'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.RemoveField(
model_name='members',
name='account_number',
),
migrations.RemoveField(
model_name='members',
name='email',
),
migrations.RemoveField(
model_name='members',
name='name',
),
migrations.RemoveField(
model_name='members',
name='password',
),
migrations.RemoveField(
model_name='members',
name='uuid',
),
migrations.AddField(
model_name='members',
name='picture',
field=models.ImageField(blank=True, null=True, upload_to='uploads'),
),
migrations.AddField(
model_name='members',
name='user',
field=models.OneToOneField(default=1, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
preserve_default=False,
),
]
# Generated by Django 5.0.6 on 2024-07-12 03:10
import datetime
import uuid
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('members', '0026_remove_members_account_number_remove_members_email_and_more'),
]
operations = [
migrations.RemoveField(
model_name='members',
name='picture',
),
migrations.RemoveField(
model_name='members',
name='user',
),
migrations.AddField(
model_name='members',
name='account_number',
field=models.CharField(default='867934046970059', editable=False, max_length=15),
),
migrations.AddField(
model_name='members',
name='email',
field=models.EmailField(default=datetime.datetime(2024, 7, 12, 3, 10, 8, 751856, tzinfo=datetime.timezone.utc), max_length=254),
preserve_default=False,
),
migrations.AddField(
model_name='members',
name='name',
field=models.CharField(default=datetime.datetime(2024, 7, 12, 3, 10, 12, 339105, tzinfo=datetime.timezone.utc), max_length=50),
preserve_default=False,
),
migrations.AddField(
model_name='members',
name='password',
field=models.CharField(default=datetime.datetime(2024, 7, 12, 3, 10, 18, 879028, tzinfo=datetime.timezone.utc), max_length=255),
preserve_default=False,
),
migrations.AddField(
model_name='members',
name='uuid',
field=models.UUIDField(default=uuid.UUID('d369404f-1c7c-401d-835b-e5d6d097d77a')),
),
]
# Generated by Django 5.0.6 on 2024-07-12 03:29
import uuid
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('members', '0027_remove_members_picture_remove_members_user_and_more'),
]
operations = [
migrations.AlterField(
model_name='members',
name='account_number',
field=models.CharField(default='247978923232139', editable=False, max_length=15),
),
migrations.AlterField(
model_name='members',
name='uuid',
field=models.UUIDField(default=uuid.UUID('b90c94f9-5360-4e11-a73f-4cab8e3c78da')),
),
]
# Generated by Django 5.0.6 on 2024-07-12 03:43
import uuid
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('members', '0028_alter_members_account_number_alter_members_uuid'),
]
operations = [
migrations.AlterField(
model_name='members',
name='account_number',
field=models.CharField(default='504849108428186', editable=False, max_length=15),
),
migrations.AlterField(
model_name='members',
name='uuid',
field=models.UUIDField(default=uuid.UUID('6167adb1-0907-43b9-88a3-27bd835df412')),
),
]
# Generated by Django 5.0.6 on 2024-07-12 03:46
import uuid
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('members', '0029_alter_members_account_number_alter_members_uuid'),
]
operations = [
migrations.AlterField(
model_name='members',
name='account_number',
field=models.CharField(default='098731120345666', editable=False, max_length=15),
),
migrations.AlterField(
model_name='members',
name='uuid',
field=models.UUIDField(default=uuid.UUID('ed0efa99-bdac-4207-9369-8fe5450f7abf')),
),
]
# Generated by Django 5.0.6 on 2024-07-12 03:48
import uuid
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('members', '0030_alter_members_account_number_alter_members_uuid'),
]
operations = [
migrations.AlterField(
model_name='members',
name='account_number',
field=models.CharField(default='612077411752323', editable=False, max_length=15),
),
migrations.AlterField(
model_name='members',
name='uuid',
field=models.UUIDField(default=uuid.UUID('a7218f2f-cf61-4ea8-9872-2bdc9d001d84')),
),
]
# Generated by Django 5.0.6 on 2024-07-12 03:51
import uuid
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('members', '0031_alter_members_account_number_alter_members_uuid'),
]
operations = [
migrations.AlterField(
model_name='members',
name='account_number',
field=models.CharField(default='323395721046290', editable=False, max_length=15),
),
migrations.AlterField(
model_name='members',
name='uuid',
field=models.UUIDField(default=uuid.UUID('2c948d79-5532-47ef-9349-c8cd119baa78')),
),
]
# Generated by Django 5.0.6 on 2024-07-12 03:57
import uuid
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('members', '0032_alter_members_account_number_alter_members_uuid'),
]
operations = [
migrations.AlterField(
model_name='members',
name='account_number',
field=models.CharField(default='309018897746558', editable=False, max_length=15),
),
migrations.AlterField(
model_name='members',
name='uuid',
field=models.UUIDField(default=uuid.UUID('f6cb8ac0-24c2-4b74-9f4c-a740041c4811')),
),
]
# Generated by Django 5.0.6 on 2024-07-12 04:07
import uuid
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('members', '0033_alter_members_account_number_alter_members_uuid'),
]
operations = [
migrations.AlterField(
model_name='members',
name='account_number',
field=models.CharField(default='300839628181539', editable=False, max_length=15),
),
migrations.AlterField(
model_name='members',
name='uuid',
field=models.UUIDField(default=uuid.UUID('4e447ee1-6541-4f94-92a8-74526f928ff4')),
),
]
from django.contrib import admin
# Register your models here.
from django.apps import AppConfig
class UsersConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'users'
# Generated by Django 5.0.6 on 2024-07-12 03:51
import django.contrib.auth.models
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
('auth', '0012_alter_user_first_name_max_length'),
]
operations = [
migrations.CreateModel(
name='User',
fields=[
('user_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to=settings.AUTH_USER_MODEL)),
('role', models.CharField(choices=[('1', 'librarian'), ('2', 'member')], max_length=50)),
('picture', models.ImageField(blank=True, null=True, upload_to='uploads')),
],
options={
'verbose_name': 'user',
'verbose_name_plural': 'users',
'abstract': False,
},
bases=('auth.user',),
managers=[
('objects', django.contrib.auth.models.UserManager()),
],
),
]
# Generated by Django 5.0.6 on 2024-07-12 03:57
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('users', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='Role',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('role', models.CharField(choices=[('1', 'librarian'), ('2', 'member')], max_length=50)),
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
migrations.DeleteModel(
name='User',
),
]
# Generated by Django 5.0.6 on 2024-07-12 04:07
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('users', '0002_role_delete_user'),
]
operations = [
migrations.RenameField(
model_name='role',
old_name='role',
new_name='name',
),
]
from django.contrib.auth.models import User
from django.db import models
ROLE_CHOICES = (
("1", "librarian"),
("2", "member"),
)
class Role(models.Model):
name = models.CharField(choices=ROLE_CHOICES, max_length=50)
def __str__(self):
return self.name
from django.test import TestCase
# Create your tests here.
from django.shortcuts import render
# Create your views here.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment