Commit ca5637af authored by Ilham Maulana's avatar Ilham Maulana 💻

fix: simple jwt logout and permissions

parent dbee2adc
from rest_framework.permissions import IsAuthenticated from rest_framework.permissions import IsAuthenticated
from rest_framework_simplejwt.tokens import RefreshToken from rest_framework_simplejwt.tokens import AccessToken
class IsStaffUser(IsAuthenticated): class IsStaffUser(IsAuthenticated):
......
...@@ -101,6 +101,15 @@ class MemberSerializer(serializers.ModelSerializer): ...@@ -101,6 +101,15 @@ class MemberSerializer(serializers.ModelSerializer):
def create(self, validated_data): def create(self, validated_data):
user_data = validated_data.pop("user") user_data = validated_data.pop("user")
user_data["is_staff"] = False user_data["is_staff"] = False
username = user_data.get("username")
email = user_data.get("email")
is_username = User.objects.filter(username=username)
is_email = User.objects.filter(email=email)
if is_username.exists() and is_email.exists():
raise serializers.ValidationError("Username or Email is already exists")
user = User.objects.create_user(**user_data) user = User.objects.create_user(**user_data)
user.set_password(user_data.get("password")) user.set_password(user_data.get("password"))
user.save() user.save()
......
...@@ -118,18 +118,27 @@ class LibrarianLoginView(LoginBaseView): ...@@ -118,18 +118,27 @@ class LibrarianLoginView(LoginBaseView):
return response return response
class LibrarianRegisterView(views.APIView): class RegisterBaseView(views.APIView):
serializer_class = None
def post(self, request): def post(self, request):
data = request.data data = request.data
data["message"] = "Register as librarian success" data["message"] = "Register as librarian success"
serializer = LibrarianSerializer(data=data) serializer = self.serializer_class(data=data)
serializer.is_valid(raise_exception=True) serializer.is_valid(raise_exception=True)
serializer.save() serializer.save()
return Response(serializer.data, status=status.HTTP_200_OK) return Response(serializer.data, status=status.HTTP_200_OK)
class LibrarianRegisterView(RegisterBaseView):
serializer_class = LibrarianSerializer
class MemberRegisterView(RegisterBaseView):
serializer_class = MemberSerializer
class MemberLoginView(LoginBaseView): class MemberLoginView(LoginBaseView):
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
......
...@@ -8,6 +8,7 @@ from .auth.views import ( ...@@ -8,6 +8,7 @@ from .auth.views import (
LibrarianLoginHistoryViewSet, LibrarianLoginHistoryViewSet,
MemberViewSet, MemberViewSet,
MemberLoginView, MemberLoginView,
MemberRegisterView,
MemberChangePasswordView, MemberChangePasswordView,
LogoutView, LogoutView,
TokenResetPasswordView, TokenResetPasswordView,
...@@ -62,6 +63,12 @@ urlpatterns = [ ...@@ -62,6 +63,12 @@ urlpatterns = [
), ),
path("auth/logout", LogoutView.as_view(), name="librarian_logout"), path("auth/logout", LogoutView.as_view(), name="librarian_logout"),
path("members/auth/login", MemberLoginView.as_view(), name="member_login"), path("members/auth/login", MemberLoginView.as_view(), name="member_login"),
path(
"members/auth/register",
MemberRegisterView.as_view(),
name="librarian_register",
),
# change password
path( path(
"members/<int:member_id>/change-password", "members/<int:member_id>/change-password",
MemberChangePasswordView.as_view(), MemberChangePasswordView.as_view(),
......
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