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"
}
이번엔 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"
}
이번에는 폰번호가 ###-###-#### 형태를 지키지 않고 가운데에 '-'를 넣지 않은 상황을 테스트 해보았다.
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"
}
이번에는 이미 존재하는 폰 번호로 회원가입을 시도해보았다.
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"
}
이미 존재하는 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"
}
이번에는 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"
}
내 코드는 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"
}
토큰 발행도 잘 되었다.
존재하지 않는 닉네임 'jene1111'으로 로그인을 시도해보았다.
http -v POST 127.0.0.1:8000/user/signin nickname='jene1111'
password='00000000'
결과:
HTTP/1.1 401 Unauthorized
{
"message": "INVALID_USER"
}
비밀번호가 '00000000'인데 '00000011'로 시도했을때 나오는 결과이다.
http -v POST 127.0.0.1:8000/user/signin nickname='jene0000'
password='00000011'
결과:
HTTP/1.1 401 Unauthorized
{
"message": "INVALID_USER"
}
아까 전에 로그인은 nickname, phone, email 셋중에 하나만 입력하고 옳은 비밀번호를 입력하면 가능하도록 구현했다고 언급했다.
하지만 password는 반드시 있어야하는 것이다.
비밀번호를 아예 입력하지 않는 경우에는 어떻게 해야할까?
http -v POST 127.0.0.1:8000/user/signin nickname='jene0000'
결과:
HTTP/1.1 401 Unauthorized
{
"message": "KEY_ERROR"
}
_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)
>>> 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')
만약 에러를 더 실험하거나 겪게 된다면 이 글을 더 업데이트할 예정이다!