Django/Django Rest FrameWork
Django Exception Handling Django에서는 exception을 어떻게 handling 하고 있을까? 공식 문서에서 살펴보면 detail에 에러 메시지를 return 하는 방식으로 error response를 주고 있다. 하지만 error response를 custom 하고 싶다면? 잘 알려진 jsend의 error response를 보자. https://github.com/omniti-labs/jsend GitHub - omniti-labs/jsend: JSend is a specification for a simple, no-frills, JSON based format for application-level communicat JSend is a specification for ..
프로젝트를 진행하면서, drf으로 아이디와 비밀번호 찾기를 구현해보았다. 우리 프로젝트에서는 아이디를 이메일로 설정했기 때문에 아이디 찾기를 구현하기 어렵다는 문제가 있었다. 그래서 이메일 찾기는 이메일이 존재하는지 아닌지 만을 확인하여 띄워주고, 비밀번호는 이메일에 메일을 보내서 url로 연결한 다음 비밀번호 찾기를 하는 방식으로 구현하였다. 먼저 이메일 찾기 먼저 살펴보자. 이메일 찾기를 위한 serializer를 먼저 작성해보자. class EmailFindSerializer(serializers.Serializer): email = serializers.EmailField(max_length=64,required=True) 간단하게 이메일만을 받는 serializer를 작성하였다. 그 다음 vie..
DRF django restDRF django rest framework를 이용하여 email 인증을 구현하는 방법에 대해서 살펴보도록 하겠다. 회원가입 시 이메일 인증을 구현하기 위해서는 SMTP와 User의 is_active 속성을 활용한다. SMTP를 통해 보내준 메일의 링크를 통해서 인증을 완료하기 전까지는 is_active 속성을 False로 두고, 인증을 하는 순간 is_active 속성을 True로 변경하여 User를 인증한다. SMTP란? Simple mail Transfer Protocol이 약자로 인터넷에서 이메일을 보내기 위해 이용되는 프로토콜이다. SMTP 웹 메일을 통해서 토큰을 날려주어 인증을 구현한다. 설정하기 장고에서 SMTP를 활용하기 위해서는 1. gmail에서 IMAP를..
이번 3편에서는 django rest framework로 user detail 확인, 내 프로필 정보 확인을 구현하도록 하겠다. 앞서 UserSerializer를 그대로 사용하여, view와 url만 추가해줄 것이다! user_detail을 확인하는 view이다. @api_view(["GET"]) @permission_classes([IsAdminUser]) def user_detail(request, pk): try: user = User.objects.get(pk=pk) return Response(UserSerializer(user).data) except User.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) method가 GET..
Django Rest Framework으로 회원가입과 로그인 구현하기 2편에서는 views.py, serializers.py, urls.py의 코드를 살펴보도록 하겠다. 우선, 회원가입에 필요한 코드부터 살펴보겠다. serializers.py에서 구현한 UserSerializer이다. User = get_user_model() class UserSerializer(serializers.ModelSerializer): password = serializers.CharField(write_only=True) class Meta: model = User fields = ( "id", #"username", "password", "gender", "nickname", "birthdate", "email", "a..
DRF django로 회원가입, 로그인을 구현하는 방법에 대해 설명하도록 하겠다. 여기서 유의할 점은, 우리 프로젝트에서는 id가 아니라 email을 username으로 사용하였다는 것이다. 이를 변경하고 싶은 분들이 참고하면 좋을 것 같다. 우선, model을 정의해야 한다. from django.contrib.auth.models import AbstractUser, AbstractBaseUser, BaseUserManager from django.db import models from django.conf import settings from django.contrib.auth.models import UserManager, PermissionsMixin # Create your models her..
앞서 살펴본 JWT를 통한 인증방식을 만일 제 3자에게 탈취당할 경우 보안에 취약하다. 만일 token의 유효기간을 짧게 한다면 사용자의 로그인 시간이 짧아져서 불편하고, 유효기간을 늘리자면 토큰을 탈취달할 때의 보안이 취약해진다. 그래서 나온 방법이 Access Token과 Refresh Token이다. 처음 로그인을 완료하였을 때 Access Token과 Refresh Token이 동시에 발급된다. 이 토큰은 긴 유효기간을 가지면서 Access Token이 만료됐을 때 새로 발급해주는 열쇠가 된다. 1. 사용자가 로그인을 한다. 2. 서버에서 DB와 값을 비교하여 로그인을 완료한다. 3. Access Token과 Refresh Token을 발급한다. 이때 일반적으로 회원 DB에 Refresh Toke..
웹 서버는 Stateless 프로토콜인 HTTP를 사용한다. HTTP는 바로 직전의 한 통신도 기억하지 못한다. Stateless 하기 때문에. 따라서, 웹사이트에서는 이러한 인증을 관리하는 방안이 필요하다. 로그인 한 유저들에 대해 권한이 필요한 매 요청마다 재로그인을 시킬 수 없기 때문이다. 따라서 이 문제를 해결하기 위해 사용되는 것은 세션(session)과 토큰(token)이다. 1. 세션 기반 인증(session based authenticaton) 세션 기반 인증(session based authentication)에는 session과 cookie가 사용된다. 크롬 브라우저에서 '쿠키 및 사이트 데이터 삭제' 같은 기능을 써본 적이 있을 것이다. 여기서 cookie는 클라이언트가 웹 사이트에 ..