지난번에는 회원가입과 로그인 코드를 하나하나 짰는데 이메일 인증을 하려고 보니.. 그냥 dj-rest-auth
로 빨리 갈아타는게 정신건강에 좋을 것 같아서 갈아탔다.
전에 views.py
랑 serializers.py
에서 열심히 썼던거는 그냥 다 날려버렸고,
패키지는 이전에 설치해둔거 그대로 사용.
djangorestframework, djangorestframework-simplejwt, dj-rest-auth, allauth
url만 이렇게 추가해주면 된다. 사용할 view 마다 따로 추가해도 되기는 한데 굳이..? 싶어서 몽땅 추가.
# urls.py
urlpatterns = [
...
# 일반 회원 회원가입/로그인
path('dj-rest-auth/', include('dj_rest_auth.urls')),
path('dj-rest-auth/registration/', include('dj_rest_auth.registration.urls'))
]
그러면 접근 가능한 url이 이렇게 늘어난다.
로그인, 회원가입에 로그아웃, 유저정보, 비밀번호 변경 및 초기화, 토큰 재발급까지 호로록 들어온다. 🐶🍯
그리고 registration
의 경우에는 이메일 인증이 자동으로 활성화되어 있어서 (아직 안쓸거니까) settings.py
에 아래 한 줄을 추가해줬다.
# settings.py
ACCOUNT_EMAIL_VERIFICATION = 'none'
하나하나 썼던걸 지우면서 가장 최소한으로 필요한게 뭔지 찾아봤는데, 정확하진 않지만 최소한 아래에 있는 것들은 없애면 오류가 났다.
# settings.py
AUTH_USER_MODEL = 'user.User'
INSTALLED_APPS = [
...
'rest_framework',
'rest_framework.authtoken',
'rest_framework_simplejwt',
'dj_rest_auth',
'dj_rest_auth.registration',
'allauth',
'allauth.account',
...
]
SITE_ID = 1
REST_USE_JWT = True
ACCOUNT_USER_MODEL_USERNAME_FIELD = None # username 필드 사용 x
ACCOUNT_EMAIL_REQUIRED = True # email 필드 사용 o
ACCOUNT_USERNAME_REQUIRED = False # username 필드 사용 x
ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_EMAIL_VERIFICATION = 'none' # 회원가입 과정에서 이메일 인증 사용 X
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_simplejwt.authentication.JWTAuthentication',
)
}
SIMPLE_JWT = {
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=30),
'REFRESH_TOKEN_LIFETIME': timedelta(days=7),
...
}
simple-jwt
를 안쓰는 것 같아서 이걸 지우려고 했더니 그건 또.. 아닌가봄? 그래서 살려뒀다.
# models.py
class UserManager(BaseUserManager):
def create_user(self, email, password, **kwargs):
if not email:
raise ValueError('Users must have an email address')
user = self.model(
email=email,
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email=None, password=None, **extra_fields):
superuser = self.create_user(
email=email,
password=password,
)
superuser.is_staff = True
superuser.is_superuser = True
superuser.is_active = True
superuser.save(using=self._db)
return superuser
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(max_length=30, unique=True, null=False, blank=False)
is_superuser = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
objects = UserManager()
USERNAME_FIELD = 'email'
유저 모델만 남기고 UserManager
는 지우려고 했는데 내가 username을 email로 쓴다고 했기 때문에 커스텀된 헬퍼클래스가 필요한가보다. 그냥 유저 생성은 됐는데 createsuperuser에서 자꾸 오류가 났음. 그래서 또 살려둠.
음..뭐..응..그래
개편하네
혹시 views.py를 아예 쓰지 않고 사용한 것 인걸까요....?