Firebase 서비스를 이용하여 로그인을 처리하는 과정 중 오류가 발생했다.
내가 하려는 서비스를 간단히 설명하자면...
위의 간단한 절차 중 3번을 처리하면서 만난 오류인데, 오류의 내용은 이러했다.
Invalid base64-encoded string: number of data characters (681) : number of data characters (1) cannot be 1 more than a multiple of 4
위의 내용을 검색해본 결과, 세션 데이터의 길이가 4배수여야 하는 데, 681로서 4의 배수보다 1이 큰 길이인 상황이어서 발생하는 오류였다.
필자는 오류를 해결하기 위해 4의 배수를 맞추기 위해, decode 소스 부분에 "=" * 3 식을 사용해 맞추어 보려했지만 로그인을 하면서 세션 데이터의 길이가 랜덤으로 바뀌는 현상이 있는지 해결이 되지 않았다..
decoded_pay = json.loads(base64.b64decode(pay).decode('UTF-8') # pay는 idToken의 payload 부분에 해당한다.
대리님께서 도와주신 덕에 해결 할 수 있었다.
데이터의 길이가 랜덤으로 바뀐다고 생각하여 데이터의 전체 길이를 4로 나눈 후 그 값을 4에서 뺀다.
그 후 뺀 값만큼 '=' 에 곱한다.
즉, 위의 내용을 식으로 작성하면
new_pay = pay + '=' * (4 - len(pay) % 4)
위의 식을 이용하여 데이터 길이를 4배수로 맞추어줄 수 있다.
new_pay = pay + '=' * (4 - len(pay) % 4)
decoded_pay = json.loads(base64.urlsafe_b64decode(bytes(pay, 'utf-8')))