ValueError: Invalid salt

Kiyong Lee·2021년 10월 24일
0

Error

목록 보기
4/6

ValueError: Invalid salt


원티드 과제에서 로그인 기능 단위테스트를 하던 중 발생한 에러입니다.

class SigninTest(TestCase) :

    def setUp(self) :
        User.objects.create(email='test@gmail.com', password='test1234!'
    
    def tearDown(self) :
        User.objects.all().delete()
    
    def test_sign_in_success(self) :
        client = Client()
        login_info = {
            'email'    : 'test@gmail.com',
            'password' : 'test1234!'
        }

        response = client.post('/users/signin', json.dumps(login_info), content_type='application/json')
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.json(),{
            'access_token' : 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MX0.zZ8gW9Xqg2Qy4ilOjv1iQWM-XqpaU-AVgVfz7FkUzfQ'
        })

로그인은 이메일과 비밀번호를 통해 진행되며, 회원가입 시 비밀번호는 암호화가 이루어집니다.

if not bcrypt.checkpw(password.encode('utf-8'), user.password.encode('utf-8')) :
      return JsonResponse({'message' : 'INVALID USER'}, status=401)

위의 코드는 로그인 시 작성한 코드인데,
내가 입력한 비밀번호와 DB에 있는 비밀번호가 일치하는지 확인하는 작업입니다.

저는 당연히 로그인할때처럼 비밀번호를 입력하면 테스트가 돌아갈 줄 알았는데..

  File "/Users/kylee/Desktop/Development/wanted/wanted_assignment/users/tests.py", line 86, in test_sign_in_success
    response = client.post('/users/signin', json.dumps(login_info), content_type='application/json')
    raise ValueError("Invalid salt")
ValueError: Invalid salt

라고 에러가 떴습니다.

확인해보니, 로그인을 하기 위해 setUp()에서 데이터를 만들 때
비밀번호를 암호화한채로 입력해줘야 되더군요

def setUp(self) :
    User.objects.create(email='test@gmail.com', password=bcrypt.hashpw('test1234!'.encode('utf-8'), bcrypt.gensalt()).decode('utf-8')) 

네.. 이렇게 비밀번호 데이터를 가상생성해줄 때, 만들어줘야 합니다

덕분에 unit test에 대해 감잡을 수 있었던 하루였습니다

profile
ISTJ인 K-개발자

0개의 댓글