유화제작 프로젝트
JWT 토큰을 활용한 로그인
- 이번 프로젝트에서는 django의 기본 session을 활용하는 것이 아닌,
JWT 토큰
을 활용하기로 하였다.
- 따라서 이에 맞게 로그인을 변경해 보았다.
- 먼저 우리가 이미 작성해 놓았던 django session을 사용한 로그인 및 로그아웃 view를 전부 삭제해 주었다.
user/urls.py
urlpatterns = [
path('', views.UserView.as_view()),
path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
path('api/season/token/', SeasonTokenObtainPairView.as_view(), name='season_token'),
path('api/authonly/', views.OnlyAuthenticatedUserView.as_view()),
]
api/token/
을 타고 들어가면 payload에 user의 정말 기본적인 정보인 id 값만 들어가게 된다.
- 반면
api/season/token/
을 타고 들어가게 되면 내가 커스텀한 user의 추가 정보들을 불러올 수 있게 된다. 해당 커스텀은 아래와 같이 진행하였고, 그 아래에 있는 SeasonTokenObtainPairView
를 통해 시리얼라이저를 사용할 수 있어 커스텀된 user의 정보를 얻을 수 있게 된다.
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
class SeasonTokenObtainPairSerializer(TokenObtainPairSerializer):
@classmethod
def get_token(cls, user):
token = super().get_token(user)
token['id'] = user.id
token['username'] = user.username
token['email'] = user.email
return token
class SeasonTokenObtainPairView(TokenObtainPairView):
serializer_class = SeasonTokenObtainPairSerializer
- 만약 access 토큰의 인증 시간이 만료되었다면,
api/token/refresh/
로 타고 들어가 만료된 토큰을 갱신할 수 있다. 로그인을 다시 하지 않고도 access 토큰을 얻을 수 있게 된다.
api/authonly/
를 타고 들어가면 인증된 사용자만이 사용할 수 있는 회원정보 조회를 사용할 수 있다.
class OnlyAuthenticatedUserView(APIView):
permission_classes = [permissions.IsAuthenticated]
authentication_classes = [JWTAuthentication]
def get(self, request):
user = request.user
if not user:
return Response({"error": "접근 권한이 없습니다."}, status=status.HTTP_401_UNAUTHORIZED)
serialized_user = UserSerializer(user)
return Response({"user_info": serialized_user.data}, status=status.HTTP_200_OK)
JWT 토큰을 활용한 로그아웃
- 해당 부분은 프론트앤드 쪽에서
refresh token
을 삭제함으로써 이루어지게 된다. 따라서 현 시점에서는 진행하지 않았다.