.png)
Mission2 과제 진행 - 회원가입 엔드포인트 만들기
Mission3 과제 진행 - 로그인 엔드포인트 만들기 (PR상태)
기존 nickname과 phone_number를 null 허용하게 했는데, 허용하지 않도록 수정함.

class User(models.Model):
.
.
nickname = models.CharField(max_length=40, unique=True)
phone_number = models.CharField(max_length=13, unique=True)
.
.
기존 get()에서 []로 변경
nickname = data['nickname']
phone_number = data['phone_number']
bcrypt를 이용해서 처리하도록 수정def encrypt_password(password):
return bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())

1.users 또는 accounts app 안에 로그인 view를 작성해주세요. [완료 👍]
2.로그인 할 때에는 사용자 계정으로 email과 비밀번호가 필수로 필요합니다. [완료 👍]
3.계정이나 패스워드 키가 전달되지 않았을 시, {"message": "KEY_ERROR"}, status code 400 을 반환합니다. [완료 👍]
4.계정이나 비밀번호가 잘 못 입력시 {"message": "INVALID_USER"}, status code 401을 반환합니다. [완료 👍]
5.로그인이 성공하면 {"message": "SUCCESS"}, status code 200을 반환합니다. [완료 👍]
6.로그인이 성공하면 token을 반환합니다. [완료 👍]
data = json.loads(request.body)
email = data['email']
password = data['password']
user = User.objects.get(email=email)
if not check_password(password, user.password):
return JsonResponse({"message": "INVALID_USER"}, status=401)
user_token = make_user_token(user.id)
return JsonResponse({"message": "SUCCESS", "token": user_token}, status=200)
KeyError 발생JSONDecodeError 발생get() 메서드를 이용해서 전송받은 email의 해당되는 user가 있는지 확인DoesNotExist error 발생def check_password(password, hashed_password):
return bcrypt.checkpw(password.encode('utf-8'), hashed_password)
유출이 되면 안된다(Git에 commit이 되면 안된다)from ######.settings import SECRET_KEY, HASH_ALGORITHM
def make_user_token(id):
return jwt.encode({'user_id': id}, SECRET_KEY, algorithm=HASH_ALGORITHM)
settings.py
from my_settings import SECRET_KEY, DATABASES, HASH_ALGORITHM
.
.
.
HASH_ALGORITHM = HASH_ALGORITHM