반응형
Django JWT를 이용한 소셜로그인 (백엔드)
Django를 백엔드로 이용해서 소셜로그인을 구현하려고 하는데 내가 못 찾는 건지 모르겠지만 Djnago를 백으로만 사용하여 구현한 글이 생각보다 참고할 글이 없고 이렇게 저렇게 시행착오가 많았
jongseoung.tistory.com
여기에서 설명했던 유저 정보를 가지고 JWT 토큰을 발급하는 Serializer을 작성하는 내용이다.
전체 코드
from rest_framework_simplejwt.tokens import RefreshToken, TokenError
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
from rest_framework import serializers
class TokenResponseSerializer(serializers.Serializer):
access_token = serializers.CharField()
refresh_token = serializers.CharField()
def __init__(self, user, *args, **kwargs):
super().__init__(*args, **kwargs)
self.token = TokenObtainPairSerializer.get_token(user)
self.user = user
def get_access_token(self):
return str(self.token.access_token)
def get_refresh_token(self):
return str(self.token)
def to_representation(self, instance):
nickname = self.user.nickname
if nickname is None:
message = True
else:
message = False
return {
"message": message,
"token": {
"email": self.user.email,
"access": self.get_access_token(),
"refresh": self.get_refresh_token(),
},
}
DRF의 직렬화 기능을 사용하여 JWT 토큰을 생성하는 클래스이다.
- __init__ 메서드는 클래스의 생성자로, user를 받아서 사용자에 대한 토큰을 생성하는 구문이다.
- get_access_token, get_refresh_tokne 메서드는 각각의 액세스 토큰과 리프레시 토큰을 문자열로 반환한다.
- to_representation 메서드는 닉네임이 존재하는지 여부에 따라서 True, False와 액세스 토큰과 리프래시 토큰을 앞전에 정의한 메서드를 이용하여 직렬화된 데이터를 반환해 주는 구문이다.
이후 아래 코드를 통해서 사용할 수 있고 이렇게 사용할 경우 data에는 to_representation의 리턴값이 직렬화되어 들어 있다.
serializer = TokenResponseSerializer(user)
data = serializer.to_representation(serializer)
반응형
'Django > DRF' 카테고리의 다른 글
DRF 구글 소셜로그인 TypeError: string indices must be integers (0) | 2023.10.12 |
---|---|
DRF Paginator를 이용한 페이지네이션 (0) | 2023.10.11 |
Django JWT를 이용한 소셜로그인 (백엔드) (0) | 2023.10.11 |
DRF JWT를 이용하여 유저 정보 GET/POST (0) | 2023.10.11 |
DRF Image DB 저장, 스웨거 적용 (0) | 2023.10.10 |