TIL) Value Error : Invalid Salt

Jiwon Lee·2022년 6월 9일
0

개인 프로젝트를 시작하고 얼마 되지 않아 회원가입/로그인 기능을 막 완성하고 테스트 코드를 작성하는 중에 마주한 에러에 대해 글을 남기려 한다.

class SignInViewTest(TestCase):
    def setUp(self):
        User.objects.create(
        email    = "lee@wemail.com",
        password = "lizzyLee@00"
        )

    def tearDown(self):
        User.objects.all().delete()

    def test_success_signin(self):
        client = Client()
        body = {
            "email"    : "lee@wemail.com",
            "password" : "lizzyLee@00"
        }
        response = client.post("/users/signin", json.dumps(body), content_type="application/json")

        self.assertEqual(response.status_code, 200)

맨 처음 내가 짰던 테스트 코드이다. 작성을 하고 "python manage.py test users" 명령어로 실행을 시켰더니 예상치 못한 에러가 발생했다.

....!?!?!
invalid salt는 뭐야....

찾아보니 같은 에러를 마주한 사람이 역시 있었다. -> 링크

알아보니 DB에 들어가는 데이터를 다시 decode해주어야 한다는 것!

	salt 			 = bcrypt.gensalt()
    encoded_password = password.encode("utf-8")
    hashed_password  = bcrypt.hashpw(encoded_password, salt)

    User.objects.create(
        name         = name,
        nickname     = nickname,
        email        = email,
        password     = hashed_password.decode("utf-8"),
        phone_number = phone_number
    )

위에 보이는 것이 내가 views.py에서 작성한 코드이다. encode해서 hashpw()에, decode해서 DB에 저장하듯이 test DB에 test data들도 이와 같이 해야한다는 말 같다.

class SignInViewTest(TestCase):
    def setUp(self):
        User.objects.create(
        email    = "lee@wemail.com",
        password = bcrypt.hashpw("lizzyLee@00".encode("utf-8"), bcrypt.gensalt()).decode("utf-8")
        )

상단의 코드가 이후에 수정한 코드.

저장하고 다시 돌려보니, 결과는 아래와 같다!!

0개의 댓글