[DRF] 소셜 로그인 TypeError: string indices must be integers 에러

윤찬효·2023년 6월 10일
0

프로젝트의 소셜 로그인 구현 중 지속 발생하는 500 에러에 대한 정리


문제

해당 코드에서 accept로 구글로그인 진행 후 회원 토큰을 발급 받는 과정에 status가 200이 아닌 500이 나온다.

그러면서 아래의 오류가 발생한다.

TypeError: string indices must be integers 에러가 발생한 원인을 찾아보았다.


원인

django-allauth 패키지에서 문제가 생겼다는 걸 찾게 되었다.

찾게 된 방법은 에러 메세지 바로 위에 response["id_token"]에서 TypeError가 발생한 것을 확인했고 allauth패키지에서 발견하였다.

allauth릴리즈노트를 찾아보았다.

0.52.0 (2022-12-29)
Note worthy changes
- Officially support Django 4.1.
- New providers: OpenID Connect, Twitter (OAuth2), Wahoo, DingTalk.
Introduced a new provider setting OAUTH_PKCE_ENABLED that enables the PKCE-enhanced Authorization Code Flow for OAuth 2.0 providers.
- When ACCOUNT_PREVENT_ENUMERATION is turned on, enumeration is now also prevented during signup, provided you are using mandatory email verification. There is a new email template (templates/account/email/acccount_already_exists_message.txt) that will be used in this scenario.
- Updated URLs of Google's endpoints to the latest version; removed a redundant userinfo call.
- Fixed Pinterest provider on new api version.

버전이 업데이트가 되면서 오류를 발생시킨 것

allauth 라이브러리를 찾아보니 googleOAuth2Adapter클래스가 바뀜

response["id_token"]에서 인덱싱 오류가 발생했다.

해당 코드를 커스텀해서 사용하려고 하던가 인덱스 값 id_token부분을 손 대려고 했는데 실패하여 버전을 낮춰서 진행해야 할 듯 하다.


해결

poetry add django-allauth==0.51.0

실행되는 버전으로 낮춰서 설치하였다.


  • 추후 최신버전의 코드를 작성하겠다.
  • 소셜 로그인 전체 코드는 다른 게시물에 작성할 예정,,

0개의 댓글