[Westagram]Mission 5-6 : 인증&인가

이태연·2021년 12월 5일
0

[Mission5-6] 인증&인가

Mission5-6에서는 인증&인가 작업을 진행합니다.
1.유저가 아이디와 비번을 생성하면 비번을 암호화해서 DB에 저장하고
2.이후에 유저가 로그인을 하기 위해 아이디와 비밀번호를 입력하면
3.유저가 입력한 비밀번호를 암호화 한 후 암호화되서 DB에 저장된 유저의 비밀번호와 비교한 후
4.일치하면 access token을 클라이언트에게 전송하는 절차를 진행해 보겠습니다.

먼저 유저가 아이디와 비번을 생성하면 비번을 암호화해서 DB에 저장하게 하기 위해 SignUpView 클래스에 bcrypt를 사용하여 암호화를 진행했습니다.

hashed_password = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt()).decode('utf-8')

그리고 이를 DB에 저장하기 위해 Mission2에서 password=data['password']였던 부분을 password=hashed_password로 변경하였습니다.

User.objects.create(
	name     = data['name'],
	email    = data['email'],
	password = hashed_password,
	phone    = data['phone'],
	nickname = data.get('nickname', '')

이후에는 SignInView 클래스에서 유저가 입력한 비밀번호를 암호화 한후 암호화되서 DB에 저장된 유저의 비밀번호와 비교합니다.

bcrypt.checkpw를 통해 비교하여 일치하지 않으면 INVALID_USER메세지가 나오도록 작성하였고 성공하면 aceess token이 보내지도록 작성하였습니다.

if not bcrypt.checkpw(data['password'].encode('utf-8'), user.password.encode('utf-8')) :
    return JsonResponse({"message":"INVLIAD_USER"}, status=401)
return JsonResponse({"message":"SUCCESS", "access_token" : access_token}, status=200)

access token의 경우 my_settings에 SECRET_KEY와 ALGORITHM을 작성하여 직접 드러나지 않도록 하였습니다. ALGORITHM은 HS256을 사용하였습니다.

access_token = jwt.encode({"id" : user.id}, SECRET_KEY, algorithm=ALGORITHM)

전체적인 코드는 다음과 같습니다.

profile
주니어 백엔드 웹 개발자입니다.

0개의 댓글