View

TIL | PYTHON_DJANGO_logIn 과정

Melody:) 2021. 9. 7. 21:15

1. 회원가입을 한다.
-> 백서버 :  DB에 회원의 정보가 저장됨.

 

2. 로그인을 한다.
-> 백서버 : 로그인시 입력한 정보와 DB에 저장된 회원의 정보가 일치하면 로그인이 성공되며, 백 서버에서는 토큰(token)을 발행해준다.

로그인 성공시 화면

# 로그인시 토큰 발행 로직

class Login(View):
    def post(self, request):
        try:
            data = json.loads(request.body)

            if not User.objects.filter(email=data['email']).exists():
                return JsonResponse({"message": "존재하지 않는 아이디입니다!"}, status=401)

            current_user = User.objects.get(email=data['email'])
            
            if not bcrypt.checkpw(data['password'].encode(), current_user.password.encode()):
                return JsonResponse({"message": "비밀번호가 일치하지 않습니다!"}, status=401)
                
            token = jwt.encode({"id": current_user.id}, SECRET_KEY, algorithm=ALGORITHM)
            
            return JsonResponse({
                "message"   : "accepted",
                "auth_token": token,
                "user_name" : current_user.name
            }, status=200)

        except KeyError:
            return JsonResponse({"message": "KEY ERROR"}, status=400)

        except JSONDecodeError:
            return JsonResponse({"message": "INVALID DATA FORMAT"}, status=400)

 

3. 백서버에서 발행해준 토큰(login-token)을 프론트단에서는 localStorage에 저장한다.

 

4. 프로트단에서는 페이지 이동시마다, localStorage에 저장되어있는 토큰을 가져와 http request시에 headers의 변수(authorization)에 담고, 백서버 접근 허가의 용도로 이 토큰을 백서버에 넘겨주게된다.

Front : 헤더의 authorization이라는 변수에 저장된 localStorage의 토큰(login-token)

 

5. 백에서는 서버에 접근하는 허가를 내주기전에  넘겨받은 토큰을 검증하는 데코레이터 로직을 통해  해당 토큰이 유효한 토큰인지 확인 후 응답을 해주게 된다.

Share Link
reply
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31