[TIL] Django Westagram: 로그인, 회원가입 error tests

Jene Hojin Choi·2021년 2월 2일
0

Django

목록 보기
5/12
post-thumbnail

1. Sign up Errors

1-1. INVALID_EMAIL, 400

email에 @을 넣지 않은 상황이다.

http -v POST 127.0.0.1:8000/user/signup email='jene0000gmail.com' 
nickname='jene0000' password='00000000' phone='010-1111-2222'

결과:

HTTP/1.1 400 Bad Request
...
{
    "message": "INVALID_EMAIL"
}

1-2. INVALID_PASSWORD, 400

이번엔 password를 8자 이하면 안되는 상황에서 7자를 넣어서 에러를 발생시킨 상황이다.

http -v POST 127.0.0.1:8000/user/signup email='jene0000@gmail.com' 
nickname='jene0000' password='0000000' phone='010-1111-2222'

결과:

HTTP/1.1 400 Bad Request
...
{
    "message": "INVALID_PASSWORD"
}

1-3. INVALID_PHONE, 400

이번에는 폰번호가 ###-###-#### 형태를 지키지 않고 가운데에 '-'를 넣지 않은 상황을 테스트 해보았다.

http -v POST 127.0.0.1:8000/user/signup email='jene0000@gmail.com' 
nickname='jene0000' password='00000000' phone='01011112222'

결과:

HTTP/1.1 400 Bad Request
{
    "message": "INVALID_PHONE"
}

1-4.USER_ALREADY_EXISTS, 409

이번에는 이미 존재하는 폰 번호로 회원가입을 시도해보았다.

http -v POST 127.0.0.1:8000/user/signup email='jene1111@gmail.com' 
nickname='jene1111' password='00000000' phone='010-1111-2222'

결과:

HTTP/1.1 409 Conflict
{
    "message": "USER_ALREADY_EXISTS"
}

1-5. NICKNAME_ALREADY_EXISTS, 409

이미 존재하는 nickname으로 회원가입을 시도해보았다.
위에서 nickname='jene0000'으로 이미 계정을 만들었는데, 다른 정보는 다 다르게 하고 nickname만 똑같이 해보았다.

http -v POST 127.0.0.1:8000/user/signup email='jene1111@gmail.com' 
nickname='jene0000' password='00000001' phone='010-1111-3333'

결과:

HTTP/1.1 409 Conflict
{
    "message": "NICKNAME_ALREADY_EXISTS"
}

1-6. KEY_ERROR, 400

이번에는 phone, password를 아예 넣지 않았다. 이 둘은 필수기 때문에 반드시 넣어줘야한다.

http -v POST 127.0.0.1:8000/user/signup email='jene1111@gmail.com' 
nickname='jene0000'

결과:

HTTP/1.1 409 Conflict
{
    "message": "KEY_ERROR"
}

2. Sign In Errors

2-0. SUCCESS, 200

내 코드는 nickname, phone, email 셋중에 하나만 입력하고 옳은 비밀번호를 입력하면 로그인이 가능하도록 구현했다. (실제 인스타그램이 그렇다.)

http -v POST 127.0.0.1:8000/user/signin email='jene0000gmail.com' 
password='00000000' 

결과:

HTTP/1.1 200 OK
{
    "message": "SUCCESS",
    "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImplbmUwMDAwQGdtYWlsLmNvbSJ9.Wfmx706jYJoA-7SYy2fOEmLl1iMAXAWlLFL48cEYwEI"
}

토큰 발행도 잘 되었다.

2-1. INVALID_USER, 401 (없는 닉네임)

존재하지 않는 닉네임 'jene1111'으로 로그인을 시도해보았다.

http -v POST 127.0.0.1:8000/user/signin nickname='jene1111' 
password='00000000'

결과:

HTTP/1.1 401 Unauthorized
{
    "message": "INVALID_USER"
}

2-2. INVALID_USER, 401 (틀린 비밀번호)

비밀번호가 '00000000'인데 '00000011'로 시도했을때 나오는 결과이다.

http -v POST 127.0.0.1:8000/user/signin nickname='jene0000' 
password='00000011'

결과:

HTTP/1.1 401 Unauthorized
{
    "message": "INVALID_USER"
}

2-3. KEY_ERROR, 400

아까 전에 로그인은 nickname, phone, email 셋중에 하나만 입력하고 옳은 비밀번호를 입력하면 가능하도록 구현했다고 언급했다.
하지만 password는 반드시 있어야하는 것이다.

비밀번호를 아예 입력하지 않는 경우에는 어떻게 해야할까?

http -v POST 127.0.0.1:8000/user/signin nickname='jene0000' 

결과:

HTTP/1.1 401 Unauthorized
{
    "message": "KEY_ERROR"
}

3. 코드 Errors.... 500....

3-1. Data too long for column

    _mysql.connection.query(self, query)
django.db.utils.DataError: (1406, "Data too long for column 'phone' at row 1")
[02/Feb/2021 23:53:13] "POST /user/signup HTTP/1.1" 500 189153

아까 전에 이 에러 보고 너무 당황했다...
이게 대체 뭐야, 했는데 당연히 내 잘못이었다 ^^.

내가 회원가입시 넣은 폰 번호는 다음과 같았고,

# http -v POST ... 
phone='010-1111-2222'

내 models.py에서 실수로 내가 번호들 사이에 있는 - (hypen)을 고려하지 않고 max_length=11 로 설정했던 것이었다...

그래서 아래와 같이 고쳐주었다.

# models.py
phone = models.CharField(null=True, max_length=15)

3-2. jwt.exceptions.DecodeError:

>>> import jwt
>>> SECRET = 'secret'

>>> access_token = jwt.encode({'user' : 1}, SECRET, algorithm = 'HS256')

....

raise DecodeError(
jwt.exceptions.DecodeError: It is required that you pass in a value for the "algorithms" argument when calling decode().

이 에러는 또 뭐야 ㅜ 나한테 왜 이래... 했는데

algorithm 이 아니고 algorithms 였습니다! ^^....

>>> access_token = jwt.encode({'user' : 1}, SECRET, algorithms = 'HS256')

만약 에러를 더 실험하거나 겪게 된다면 이 글을 더 업데이트할 예정이다!

0개의 댓글