DRF- simple JWT 로그인구현

jeong_hyeon·2022년 5월 30일
0

Django_DRF

목록 보기
7/12
post-thumbnail

저번 회원가입에 이어서 로그인 부분을 진행
기존처럼 Token 을 return 해서 headers에 넣는 방법

#serializer.py
class SigninSirializer(serializers.ModelSerializer):
    email = serializers.CharField(
        required = True,
        write_only = True
    )
    password = serializers.CharField(
        required = True,
        write_only = True,
        style= {'input_type' : 'password'}
    )
    class Meta(object):
        model = User
        fields = ('email', 'password')

    def validate(self, data):
        email = data.get('email',None)
        password = data.get('password',None)

        if User.objects.filter(email=email).exists():
            user = User.objects.get(email=email)

            if not user.check_password(password):
                raise serializers.ValidationError('Check Your Email or Password')
        
        else:
            raise serializers.ValidationError("User does not exist")
        

        token = RefreshToken.for_user(user=user)
        data = {
            'user' : user.id,
            'refresh_token' : str(token),
            'access_token' : str(token.access_token)
        }
        return data
#views.py
class SigninView(generics.GenericAPIView):
    serializer_class = SigninSirializer
    
    def post(self, request):
        serializer = self.get_serializer(data=request.data)
        
        serializer.is_valid(raise_exception = True)
        token = serializer.validated_data
        return Response({"token":token}, status=status.HTTP_200_OK)
#urls.py
from django.urls import path
from .views import SignupView,SigninView
# from . import views
from rest_framework_simplejwt.views import TokenObtainPairView,TokenRefreshView, TokenVerifyView
from rest_framework.routers import DefaultRouter

urlpatterns = [
    path('signup/', SignupView.as_view()),
    path('signin/',SigninView.as_view()),
]

generics.genericsAPIView에 해당하는 로그인 창이 나온다 여기에 로그인을 진행한다면

HTML form처럼 비밀번호는 암호화 되서 들어온다.

로그인이 완료된다면 해당 사진과 같이 refresh_token과 access token이 들어온다.

0개의 댓글