반응형

안녕하세요.

장고에서 jwt 인증 방법을 활용하여 회원가입 및 로그인 구현을 해보겠습니다.

기존에는 쿠키-세션에 유저 정보가 있는데요. 쿠키를 사용해서 유저를 식별합니다.

이를 통해서 로그인 여부를 알 수 있습니다.

기존의 방법은 rest api에 적합하지 않고 리액트에서는 쿠키를 관리하지 않아 인증 메커니즘을 변경시켜주셔야 됩니다.

우리는 jwt 인증 방식으로 사용자 인증을 진행하겠습니다.

jwt는 javascript web token의 약자입니다.

즉, 사용자에게 토큰을 발행해서 인증이 된 사용자인지 판별 하는 것입니다.

어렵지 않으니 하나씩 하나씩 변경을 해주시면 되겠습니다.

 

장고에서는 jwt 사용을 위해서 패키지를 제공해줍니다. 아래와 같이 설치해주세요.

1) djangorestframework-jwt 설치

pip install djangorestframework-jwt

2) 세팅 파일에 다음과 같은 인증을(코드를) 추가

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication',
    ),
}

이 2가지만 해주시면 jwt 사용은 가능합니다.

 

다음으로 로그인과 회원가입을 위한 rest api를 만들어 보겠습니다.

이 내용도 패키지가 제공이 되어 정말 심플하게 구현이 가능합니다.

 

3) django-rest-auth 설치

pip install django-rest-auth

4) 세팅 파일에 INSTALLED_APPS에 필요로 하는 app 추가

INSTALLED_APPS = (
    ...,
    'allauth',
    'allauth.account',
    'rest_auth.registration',
)

5) jwt 인증 사용을 위한 sesstion 및 기본 인증 주석 처리

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
        #'rest_framework.authentication.SessionAuthentication',
        #'rest_framework.authentication.BasicAuthentication',
    ),
}

6) 기본 설정

#ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_REQUIRED = False

#ACCOUNT_EMAIL_VERIFICATION = "mandatory"
ACCOUNT_EMAIL_VERIFICATION = "none"

REST_USE_JWT = True
ACCOUNT_LOGOUT_ON_GET = True

 

7) URL 추가

path("rest-auth/", include('rest_auth.urls')),
path("rest-auth/registration/", include('rest_auth.registration.urls')),

마지막으로 URL을 설정해주시면 됩니다.

우리는 JWT 세팅과 회원가입과 로그인을 위한 rest  api도 만들었습니다.

테스트를 진행하겠습니다.

 

* 회원가입

회원가입이 되고 토큰이 생성되는 모습을 볼 수 있습니다.

 

* 로그인

로그인이 성공되고 token이 만들어집니다.

사용자는 이후에 우리의 서버에 접속하기 위해서는 아래처럼 헤더에 token을 갖고 시도를 해야 접속을 할 수 있습니다.

 

감사합니다.

 

* 참고 사이트

- djangorestframework-jwt

https://jpadilla.github.io/django-rest-framework-jwt/

 

- django rest auth

https://django-rest-auth.readthedocs.io/en/latest/index.html

반응형

+ Recent posts