-
[DRF - User] 로그인 API한이음 프로젝트 2023. 8. 21. 16:34
이번에는 회원가입에 이어서 로그인파트를 만들어보도록 하겠습니다.
- Serializers.py
- views.py
- urls.py
- postman 실행
1. Serializer.py
class LoginSerializer(serializers.Serializer): userIdx = serializers.IntegerField( read_only=True) username = serializers.CharField(max_length= 30, read_only=True) user_id = serializers.CharField(max_length = 30) email = serializers.EmailField(max_length= 30, read_only=True) password = serializers.CharField(max_length=128, write_only=True) last_login = serializers.CharField(max_length=255, read_only=True) access_token = serializers.CharField(max_length=255, read_only=True) refresh_token = serializers.CharField(max_length=255, read_only=True) def validate(self,data): user_id = data.get('user_id', None) password = data.get('password', None) if user_id is None: raise serializers.ValidationError( '로그인하려면 아이디가 필요합니다.' ) if password is None: raise serializers.ValidationEroor( '로그인하려면 비밀번호가 필요합니다.' ) # db와 매칭시킨다. 없을경우 None 반환시킴 이는 사용자 모델 필드를 검사하는 함수임 user = authenticate(user_id=user_id, password=password) if user is None: raise serializers.ValidationError( '해당 아이디 혹은 패스워드를 찾을 수 없습니다.' ) if not user.is_active: raise serializers.ValidationError( '해당 계정은 비활성화 상태입니다.' ) user.last_login = timezone.now() user.save(update_fields=['last_login']) # Generate JWT tokens refresh = RefreshToken.for_user(user) access_token = str(refresh.access_token) refresh_token = str(refresh) return{ 'userIdx' : user.userIdx, 'user_id' : user.user_id, 'username': user.username, 'email': user.email, 'last_login': user.last_login, 'access_token': access_token, 'refresh_token': refresh_token }
2. Views.py
다음은 view.py에 아래와 같이 작성할 것입니다.
class LoginAPIView(APIView): permission_classes = (AllowAny,) serializer_class = LoginSerializer def post(self, request): user= request.data serializer = self.serializer_class(data=user) serializer.is_valid(raise_exception= True) return Response(serializer.data, status=status.HTTP_200_OK)
3. urls.py
urls.py에는 아까 views.py에 추가한 코드를 사용하기 위해 코드를 추가해줍니다.
urlpatterns = [ path('register', RegistrationAPIView.as_view()), path('login', LoginAPIView.as_view()), # 추가 ]
4. postman
<request>
<response>
이렇게 로그인까지 완료했습니다. jwt 토큰까지 발행을 완료했습니다.
다음 시간에는 회원가입을 할때 번호를 사용해서 인증번호를 받아오는 것을 배우도록 하겠습니다.
'한이음 프로젝트' 카테고리의 다른 글
[DRF- User& sms인증] 아이디 찾기 (0) 2023.09.12 [DRF - SMS] 네이버 SMS 문자 인증 구현하기 (1) 2023.09.05 [DRF - User] 회원가입 API (0) 2023.08.21 [DRF - User] 커스텀 User -1 (0) 2023.08.21 DRF 공부( python) (0) 2023.07.31